Fix user iteration callbacks.

User callbacks got broken at some point due to the extra
layer of copying from Solver::Options to Minimizer::Options.
This copies the user callbacks when initializing
Minimizer::Options from Solver::Options, and adds a test to
this effect.

This also fixes a bug where the state updating callback was
not called before the user callbacks. This also adds a test
to solver_impl_test to ensure the state updating callbacks
work as expected.

Thanks to Luis Alberto Zarrabeitia for the report.

Issue: 46
Change-Id: I2b36415c89dafaa5c84ecaa727a325df122e1092
diff --git a/internal/ceres/trust_region_minimizer.cc b/internal/ceres/trust_region_minimizer.cc
index 4d0c91e..c475690 100644
--- a/internal/ceres/trust_region_minimizer.cc
+++ b/internal/ceres/trust_region_minimizer.cc
@@ -59,7 +59,6 @@
 // the callbacks does not return SOLVER_CONTINUE, then stop and return
 // its status.
 CallbackReturnType TrustRegionMinimizer::RunCallbacks(
-    const Minimizer::Options& options_,
     const IterationSummary& iteration_summary) {
   for (int i = 0; i < options_.callbacks.size(); ++i) {
     const CallbackReturnType status =
@@ -219,7 +218,7 @@
   summary->iterations.push_back(iteration_summary);
 
   // Call the various callbacks.
-  switch (RunCallbacks(options_, iteration_summary)) {
+  switch (RunCallbacks(iteration_summary)) {
     case SOLVER_TERMINATE_SUCCESSFULLY:
       summary->termination_type = USER_SUCCESS;
       VLOG(1) << "Terminating: User callback returned USER_SUCCESS.";
@@ -441,7 +440,7 @@
         summary->preprocessor_time_in_seconds;
     summary->iterations.push_back(iteration_summary);
 
-    switch (RunCallbacks(options_, iteration_summary)) {
+    switch (RunCallbacks(iteration_summary)) {
       case SOLVER_TERMINATE_SUCCESSFULLY:
         summary->termination_type = USER_SUCCESS;
         VLOG(1) << "Terminating: User callback returned USER_SUCCESS.";