Model noparams

This branch implements composite models through a list of sub-models in `Model.components`.

Composite models have these properties:
1. `Model.func = None`
2. The list `Model.param_names` contains all the parameter names from sub-models and any additional parameter added through a hint
3. The list `Model.independent_vars` is set from the first base model and it is assumed that all the base models have same independent variables names
4. Hints from sub-models are applied. Hints from the composite model can override hints from sub-models
5. Hints on the composite models must use the full parameter name (i.e. with prefix).
6. Setting a hint on a parameter not in `Model.param_names` results in the silent creation of a new parameter when calling `.make_params()`. A `verbose` flag can be used to print a message when this happens.
5. By accessing the sub-models in `.components` is possible to evaluate (and plot) all the base models individually
6. The name of a composite model is obtained by default by joining the names of the base models. A new name can be assigned by assigning to `Model.name`

The branch has been manually tested on a few examples but not with unit-tests. 

**EDITED typos**