Added inverse to some models and SCompositeModel.

This PR adds `inverse()` method to some models.
The idea is to add analytical inverse to models when possible as `Model.inverse()` and change the flag `Model.has_inverse` to `True`.
This is different from `Model.invert()` which will implement a general iterative method to calculate the inverse of some input.
The `inverse` method returns an object which performs the inverse transformation.

The `SCompositeModel` which combines models in series then has an inverse if all children models have inverse.
Is this acceptable?