Expression support

- Can parse, evaluate and serialize strongly-typed expressions
- Implements most common operations
- Can detect "static" type-errors
- Throws nice exceptions to complain about runtime evaluation problems