Multiple sparse linear algebra backends.

1. Added support for CXSparse - SparseNormalCholesky and
   SchurComplementSolver support SuiteSparse and CXSparse now.
   I am not sure I will add suport for visibility based
   preconditioning using CXSparse. Its not a high priority.

2. New enum SparseLinearAlgebraLibraryType which allows the user
   to indicate which sparse linear algebra library should be used.

3. Updated tests for SolverImpl and system_test.

4. Build system changes to automatically detect CXSparse and
   link to it by default -- just like SuiteSparse.

5. Minor bug fixes dealing in the cmake files and VBP.

6. Changed the order of the system test.

7. Deduped the unsymmetric linear solver test.

Change-Id: I33252a103c87b722ecb7ed7b5f0ae7fd91249244
diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt
index 2793ee5..1b8b0d0 100644
--- a/internal/ceres/CMakeLists.txt
+++ b/internal/ceres/CMakeLists.txt
@@ -130,6 +130,10 @@
   ENDIF (EXISTS ${BLAS_LIB})
 ENDIF (SUITESPARSE)
 
+IF (CXSPARSE)
+  LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${CXSPARSE_LIB})
+ENDIF (CXSPARSE)
+
 IF (OPENMP_FOUND)
   LIST(APPEND CERES_LIBRARY_DEPENDENCIES gomp)
 ENDIF (OPENMP_FOUND)
@@ -191,13 +195,15 @@
   CERES_TEST(schur_ordering)
   CERES_TEST(solver_impl)
   CERES_TEST(symmetric_linear_solver)
-  IF (GFLAGS)
-    CERES_TEST(system)
-  ENDIF (GFLAGS)
   CERES_TEST(triplet_sparse_matrix)
   CERES_TEST(unsymmetric_linear_solver)
   CERES_TEST(visibility)
   IF (GFLAGS)
     CERES_TEST(visibility_based_preconditioner)
   ENDIF (GFLAGS)
+
+  # Large end to end test for the entire solver.
+  IF (GFLAGS)
+    CERES_TEST(system)
+  ENDIF (GFLAGS)
 ENDIF (BUILD_TESTING)