Support order by in aggregate function
My own sense is that this is a niche usage and not widely supported.

Rather than implement a special-case for this, I'll suggest using `NodeList` and `SQL` to compose the appropriate "ORDER BY" clause. Could you give an example on how to use NodeList with `fn`? Because for me:
+ `fn` wraps its arguments with parens and,
+ I couldn't figure out how to put `NodeList` as `fn` argument.  ```sql
SELECT array_agg(
    "t1"."name" ORDER BY "t1"."name" ASC, "t1"."created_at" DESC
) AS "users" 
```

```python
name_asc = NodeList((User.name, SQL('ORDER BY'), User.name.asc()))
...select(fn.array_agg(name_asc, User.created_at.desc()).alias('users'))
``` That's much harder to look at. Guess I just have to maintain a subclass in my code.

By the way, what do you think are the cons of supporting this in `fn`?
PostgreSQL support ORDER BY in aggregate function (e.g `json_agg`, `array_agg`, etc.) like this:

```SQL
SELECT array_agg(
    "t1"."name" ORDER BY "t1"."name" ASC, "t1"."created_at" DESC
) AS "users" 
FROM "users" AS "t1"
```

This PR extend `fn` API to support this kind of query.

```
fn.array_agg(User.name).order_by(User.name.asc(), User.created_at.desc())
```