The Complex-Step Derivative Approximation