Improvements to expressions implementation

  - Added get_source_expressions() and set_source_expressions()
    to ExpressionNode. The reasoning is that this way it is
    easier to create base methods that work the right way for
    every expression type.
  - Some improvements to aggregation handling. The test case added in
    this commit didn't work correctly (the Greatest node wasn't
    detected as something that requires GROUP BY). ExpressionNode now
    calculates dynamically is_aggregate attribute. The attribute
    might need renaming now. Its meaning is "does this node contain
    an aggregate", but contains_aggregate is already in use (that
    one could be renamed to refs_aggregate...)
  - Changes to summarized aggregate handling.
  - Some renamings:
      self.source is renamed to self._output_type
      self._output_type is renamed to self._output_type_or_none
  - Renamed ExpressionNode.prepare() to resolve_expression()
  - Anything with contains_aggreagte() and resolve_expression() methods
    can be used as the rhs value in .filter() clauses.
  - F-objects aren't ExpressionNode instances any more. Instead
    F-objects are resolved to ExpressionNode instances through
    resolve_expression().
  - Added a new Mixin class CombinableMixin. Both F and ExpressionNode
    inherit CombinableMixin.
  - The get_prep_lookup() method will no longer call .prepare(), instead
    it will only check for existence of ._prepare() method and call that
    if it exists.
  - Added some docstrings.