Initially the `parameters` list attribute was used for evaluating the model but because of the multiple parameter sets the evaluation was changed to use `param_sets`, which was a mistake since constructing `param_sets` uses properties to look up the values. I would like to go back to using a list or as close as possible, something like this:

```
p = np.asarray(self.parameters)
p.shape = (len(self.param_names), self.param_dim)
result = self.eval(x, *p)
```
Timing shows this is 1.5 x faster than using `param_sets`. If you agree with this, would you make the change?
There are other improvements that can be done but they are related also to constraints handling and deserve a separate PR.