Move some AST class helper methods out into extension classes

IMO the AST is a bit cluttered, this is a start of some cleanup refactoring.
There is a lot more that can be done.. I'm interested in a discussion on what we can/should do.

I would like to:
- Declutter classes by moving functionality that _can_ be external into extension classes.
- Moving all types into their own file.
- Order the AST project a by creating a folder hierarchy (e.g. all the different types that inherit from Type can go into a "Types" folder).