cglpk solver failing raises informative exception

The error code and error message are included in the RuntimeError,
instead of simply a failed assertion.
Make solver interface more unified

 - Model.optimize no longer gives parameter values by default. The
   defaults are left to the solvers.
 - Each solver has a _SUPPORTS_MILP property which can be used to
   determine if it solves mixed integer programs.
 - Solver options are now more unified. All solvers now accept (in
   addition to their own additional ones)
   - time_limit
   - tolerance_feasibility
   - tolerance_markowitz