ENH: extend the quadratic model class in optimize/trust-region

- The class is now an abstract/base class; child classes must implement
  the `solve` method which is specific to the kind of model (dogleg, ncg).
- Child classes for dogleg and ncg methods are defined in their respective
  modules.
- Rename `solve_subproblem` parameter into `subproblem`, this should now be an
  instance of the quadratic model class.

In the base class:

- Turn a few methods into properties, to make it clearer where computations
  take place.
- Make parameter to `__call__` mandatory; call `m.fun` (or m(0)) when the
  objective function value is needed.
- Embed `_help_solve_subproblem` as a `get_boundaries_intersections` method
  (not strictly necessary but clearer this way IMO).

- Move `cauchy_point` and `newton_point` methods into dogleg quadratic
  subproblem subclass.
DOC: declare options for trust-region algorithms
Merge pull request #2 from dlax/trust-region-enh

Other optimize / trust-region improvements