Fixed #14030 -- Allowed annotations to accept non-aggregates

This PR supersedes https://github.com/django/django/pull/2184 and fixes https://code.djangoproject.com/ticket/14030.

Annotate has learned to accept non-aggregates, and aggregates can now use F() objects and arithmetic, since they now derive from ExpressionNode:

```
Author.objects.annotate(combined_ages=Sum(F('age')+F('friends__age')))
Author.objects.annotate(double_age=F('age')*2)
```
 ML discussion: https://groups.google.com/forum/#!topic/django-developers/8vEAwSwJGMc

I'm going to close the previous PR which only implements the aggregates refactor. The additional commits for this PR allow non-aggregate annotation, and includes the beginnings of documentation.

There's still a little bit to be done, but I'm confident that both of these items can be completed in a fairly short timeline (within a week if required immediately):

- ~~Complete documentation~~
- ~~Implement deprecation path~~
  - ~~renamed aggregates to annotations attribute on sql/query.py~~
  - ~~sql/aggregates should no longer be used~~

I'm fairly sure the code is solid and ready for review. I admit, it's a big change. But it does increase the utility of aggregates and annotations significantly, and allows users to implement their own aggregates and expressions very succinctly.



You're right. It was existing (before your patch).

This method is inserted into the converter chain here: https://github.com/django/django/pull/2496/files#diff-4acea48b4435c36cdfd637839b45faf8R773

And looks like: https://github.com/django/django/blob/master/django/db/backends/oracle/base.py#L269

Would you recommend a different strategy?

I tried to collect the annotation converters in the get_converter method, but it would mean determining the correct indexes of the annotations in yet another place (which probably means it needs to be factored out..). Instead, the annotation converters are collected immediately after the other converters.

Quite happy to clean this up if you can suggest something nicer.