Solver::Options::ordering* are dead.

Remove the old ordering API, and modify solver_impl.cc
to use the new API everywhere.

In the process also clean up the linear solver instantion
logic in solver_impl.cc a bit too.

Change-Id: Ia66898abc7f622070b184b21fce8cc6140c4cebf
diff --git a/internal/ceres/solver_impl.h b/internal/ceres/solver_impl.h
index 11b44de..076a371 100644
--- a/internal/ceres/solver_impl.h
+++ b/internal/ceres/solver_impl.h
@@ -37,6 +37,8 @@
 #include "ceres/solver.h"
 
 namespace ceres {
+class Ordering;
+
 namespace internal {
 
 class Evaluator;
@@ -76,7 +78,7 @@
   // indicates an error was encountered whose cause is logged to
   // LOG(ERROR).
   static bool ApplyUserOrdering(const ProblemImpl& problem_impl,
-                                vector<double*>& ordering,
+                                const Ordering* ordering,
                                 Program* program,
                                 string* error);
 
@@ -108,9 +110,13 @@
   // If fixed_cost is not NULL, the residual blocks that are removed
   // are evaluated and the sum of their cost is returned in fixed_cost.
   static bool RemoveFixedBlocksFromProgram(Program* program,
-                                           int* num_eliminate_blocks,
+                                           Ordering* ordering,
                                            double* fixed_cost,
                                            string* error);
+
+  static bool IsOrderingValid(const Solver::Options& options,
+                              const ProblemImpl* problem_impl,
+                              string* error);
 };
 
 }  // namespace internal