automatic differentiation

This integrates the recent automatic differentiation work into Optim. I didn't completely document it in the README and add comprehensive tests, wanted to get feedback first. The logic in ``autodiff.jl`` should eventually belong to a standalone unified AutoDiff package, but until that's organized it's only 20 extra lines of code. Otherwise the changes to Optim are pretty non-invasive. I'm excited for people to try this out and see what breaks with the DualNumbers package.

cc: @scidom