Deal with Krylov solve

1. Remove ``multi-component'' option;
2. Make monitor and preconditioner compatible with CUSP library;
3. Add more Krylov method: CR, GMRES and CUSP's BiCGStab and CG
Change variable name
Merge branch 'feature/krylov', remote-tracking branch 'origin/develop' into feature/krylov
Modify the SPMV functor class to be a cusp::linear_operator.

This allows Spike::GPU to directly use the Cusp Krylov solvers, while allowing a user-defined SPMV operator.
Allow using one of 4 Cusp Krylov solvers and one of 2 Spike-defined solvers.

Currently supported Cusp Krylov solvers: BiCGStab, GMRES, CG, and CR.
Spike::GPU Krylov solvers: BiCGStab(1) and BiCGStab(2).
Modify the operator() to skip any copying if no preconditioning is used.

This operator is a wrapper around the preconditioner solve function.
It is invoked from a Krylov solver through Cusp's multiply() algorithm.
Modify Spike::GPU's BiCGStab(L) Krylov solver to match the specification of the Cusp Krylov solvers.
Remove custom implementation of CG -- now directly using the cg solver from Cusp.
Update all example drivers to match changes to Spike::GPU solver and preconditioner.

This includes changes to the available Krylov solvers and to the specification of the SPMV functor class.
Make the modified code be able to build on Linux machine
Add MINRES iterative solver.

Needs some more work, but is functional.
Combine two calls to cusp::blas::axpby with a single cusp::blas::axpbypcz.
Modified the monitor class to accommodate solvers which have additional failure modes.

- Add function to force a failure
- Differentiate between different types of failures
- Remove non-standard postfix increment operator (prefix increment is all that's needed anyway)
Changed the MINRES Krylov solver to properly use the monitor class.
A slight change in doing RCM

If the maximum bandwidth is specified to be 0, it does not make
much sense to apply RCM reordering.
Merge branch 'feature/krylov' into develop