Status base class

This adds a decorator to the QiitaStatusObject that can check what the status of the object is and stop functions from running if not correct. examples:

```Python
class Study(QiitaStatusObject):
...
    @self.check_status("public", exclude=True)
    def delete_something(self):
        ...
```

Would only allow deletions if the study was not public. Makes for a nice way of having data integrity with everything still not living in memory.

This needed some changes to the database, mainly what the names of the status tables are called and changing every status column to be named `status`. Only affected the `study_status`, `required_sample_info`, and `sample_status` tables.

This also adds a subtle change to the main QiitaObject - a _table variable that will hold the name of the table that the object's id comes from, e.g. for the Study object we would have `self._table = "study"`.