Dogleg strategy and timing cleanups.

1. A new dogleg trust region strategy.
2. Consistent naming of all variables taking and reporting
   time. Also all are doubles now.
3. Enum to stringification routines.
4. bundle_adjuster.cc accepts max solver time and trust_region_strategy.
5. Time accounting is pushed into solver_impl.cc and there is now
   postprocessing time accounted for explicitly.
6. IterationCallback now has cumulative time.
7. LoggingCallback logs per iteration and cumulative time.
8. TrustRegionStrategy now allows for Invalid steps to be indicated
   explicitly.
9. Trust region minimizer actually terminates on max_solver_time.

Change-Id: I7e3b82c8beebc17b6b355ea46ddd280754a2d8b2
diff --git a/include/ceres/iteration_callback.h b/include/ceres/iteration_callback.h
index 6d7720c..29157d3 100644
--- a/include/ceres/iteration_callback.h
+++ b/include/ceres/iteration_callback.h
@@ -91,15 +91,15 @@
   // Newton step.
   int linear_solver_iterations;
 
-  // TODO(sameeragarwal): Change the following two to use a higher
-  // precision timer using clock_gettime.
-  //
   // Time (in seconds) spent inside the minimizer loop in the current
   // iteration.
-  int iteration_time_sec;
+  double iteration_time_in_seconds;
 
   // Time (in seconds) spent inside the trust region step solver.
-  int step_solver_time_sec;
+  double step_solver_time_in_seconds;
+
+  // Time (in seconds) since the user called Solve().
+  double cumulative_time_in_seconds;
 };
 
 // Interface for specifying callbacks that are executed at the end of