* Moved the AST datastructures into their own module.
* Collapsed the Expression Enum to just wrappers around structs
instead of having actual structs in the definitions.
* Added a few more unit tests to ensure nothing got broken.
* Added documentation for the new structs.
* Added a unifying BinaryExpression Tuple type.
Note: We change all our lifetimes in this.
It was getting too complicated for this first pass to avoid
copies. This makes lifetime management much easier to handle.
Each one of Val, Value, and Expression contain no references anymore.