Lots more cleanup

- Registering a function can typehint on callable
- No need for a special prettyPrint function when debugging
- Simplified validation by removing default types and variadics.
- Using short array syntax in functions.
- Removing the ability to inject a parser or interpreter from runtimes.
- TreeInterpreter now requires a RuntimeInterface in the constructor.