Parser rewrite, cleanup

Changes:
- Rewrote parser to parse recursively; now handles both lists and vectors
- Moved lexing code into its own file for ease of reading
- Removed extraneous 'get { }' from read-only properties