Fixing models

Based on https://github.com/astropy/specutils/pull/92. Making models compatible with the latest astropy model framework
Fixes: https://github.com/astropy/specutils/issues/93 partially. 
IRAF specific models will be fixed in https://github.com/astropy/specutils/pull/86.
@wkerzendorf @nhmc How does this look?
Note, it's also fine for `evaluate` to be a normal method, i.e.

```
def evaluate(self, ...):
    ....
```

which means you can perfectly well access `self.unit` from within `evaluate`.  The reason this isn't the case for other attributes such as parameters is that the `evaluate` method is also used for fitting, and thus needs to be able to take constantly updated parameter values as arguments.