Support for CASE or FILTER in COUNT
I came up with the following hacks/workarounds:

``` python
        q = Task.select(Task.machine,
                    fn.COUNT(Task.id).alias('total'),
                    fn.COUNT(SQL('t1.id) FILTER (WHERE t1.status = %s', 'running')).alias('running')) \
                .group_by(Task.machine)

```

``` python
       q = Task.select(Task.machine,
                    fn.COUNT(Task.machine).alias('total'),
                    fn.COUNT(SQL('CASE WHEN t1.status = %s THEN t1.id END', 'running')).alias('running')) \
                .group_by(Task.machine)
```
 There is support for `Case`: http://docs.peewee-orm.com/en/latest/peewee/playhouse.html#case

For other arbitrary ones, you can do:

``` python
Clause(
    fn.COUNT(Task.id),
    fn.FILTER(Clause(SQL('WHERE'), Task.status == 'running'))
)
```

Given a table `tas` with the following columns:

```
id | machine | status
```

I would like to count the number of total and running tasks per machine.

In PostgreSQL 9.5 this is possible using:

``` sql
SELECT machine,
  COUNT(id) FILTER (WHERE status='running') AS running,
  COUNT(id) AS total
  FROM task
  GROUP BY(machine);
```

So I naively write:

``` py
       q = Task.select(Task.machine,
                    fn.COUNT(Task.machine).alias('total'),
                    fn.COUNT(Task.machine).where(Task.status == "running").alias('running')) \
                .group_by(Task.machine)
```

which gives me something like

``` sql
SELECT "t1"."machine", COUNT("t1"."id") AS total, filter("t1"."status" = 'running') AS running FROM "task" AS t1 GROUP BY "t1"."machine"'
```

Unfortunately, PostgresSQL prior to 9.5 seems to need a slightly different construct:

``` sql
SELECT machine,
  COUNT(CASE WHEN status='running' THEN id END) AS running,
  COUNT(id) AS total
  FROM task
  GROUP BY(machine);
```

From reading the code I guess one would have to write a function similar to the `over()` already present in `Func`.
