2.0.0: Use more features from C++11 and refactoring.

This will drop support for GCC 4.6 and Visual Studio 2012.
* Additional C++11 features such as member initialization in class definitions.
* Each solver now a different class.