Refactor expressions into smaller components

Inspiration for splitting the expression classes comes from PeeWee
which has a fairly good object model.

Split ExpressionNode into smaller units

All tests passing after refactor

Clean up expression implementation

Summarised aggregate state is passed through prepare

Make Col types into expressions

Small tweaks to improve the Func type

Fix regression with non-aggregate annotations

Tests for custom sql functions

Change arguments name to expressions

Fix documentation related to expression refactor

fix regressions when renaming template params