Refactor aggregates as expressions #14030

This PR isn't ready for commit, and is not complete, but I'm hoping for some feedback on the direction.

The patch is in reference to: https://code.djangoproject.com/ticket/14030 and currently implements aggregates as ExpressionNodes (F() objects), allowing behaviour like:

```
Author.objects.annotate(combined_ages=Sum(F('age')+F('friends__age')))
```

There's still a bit that needs to be done:

- ~~Fix some issues relating to Lookups and GIS~~
- ~~Some general tidying up~~
- Tests need to run on ~~MySQL and~~ Oracle
- Decide on a strategy on back-compat for 3rd party aggregates. Naive support implemented already, requires review
- ~~Implement non-aggregate annotations~~ *this will be done in a separate branch*
- Docs

I'd love to hear some feedback, especially from maintainers of 3rd party backends (SQL and NoSQL). I'm aiming for as much backwards compatibility as possible, so please raise any pain points.

Previous discussion on the mailing list: https://groups.google.com/forum/#!topic/django-developers/8vEAwSwJGMc