Better control of and handling for forward vs adjoint

1. Added new gradient_option "derivative_direction" which allows the use to force a driver to solve its derivatives in forward or adjoint direction. Default is auto, where OpenMDAO figures it out like normal.

2. The derivative calculation will now raise an exception if you try to calculate forward/adjoint and the components specify the wrong direction.

3. Minor speedup: put some caching in initialize_residuals so we don't recalculate the bounds every time.