More advanced index creation
I love it! When you're declaring an index inside the `Meta` attribute, the Python interpreter hasn't constructed the actual model class yet, so you can't do neat things like this:

```python
class Article(Model):
    name = TextField()
    timestamp = TimestampField()
    status = IntegerField(default=1)
    flags = IntegerField(default=0)

    class Meta:
        indexes = (
            Index(fn.SUBSTR(Article.name, 1, 1), Article.timestamp.desc()).where(Article.status == 1),
        )
```

So I think an alternative would be to simply allow `SQL()` objects to be included alongside the tuples? You'd have to specify the full SQL for the index, but at least that guarantees everything is supported. WDYT? Added in 3.0a
Currently one can only define indexes using a tuple consisting of column names and uniqueness. With this construct it is not possible to create functional or partial indexes, for instance.

While ways exist, it is a) what way is to be preferred and b) most often the declaration of that index will be somewhere else than all the other indexes of a table.

I therefore suggest add an `Index` class that can be used in lieu of the tuple and which encapsulates the creation of index-related data (name, query). So, whenever one needs special constructs that peewee does not offer, a simple subclass is sufficient.