Solver switching support & implementation of Nesterov's accelerated grad...

...ient and AdaGrad
@jeffdonahue 
This is picking a nit since shared_ptr is fine... but std::unique_ptr instead? We don't need the overhead of reference counting, though that's trivial extra overhead. Which we would need to enable c++11 for. Which makes me wonder: is there a particular reason we don't want to throw the switch on c++11?