Got rid of `y` and `z` registers
Implemented `define`
REPLState now flows between the outer StateT and the inner Parsec

- Before, any changes made to the state within Parsec would be lost.
  Now, it is returned to the outer StateT and updated.
- This allows `define` to work.
Simple function definition works

- Arguments can be hacked by globally defining them first, then
  by using them in the desired function.

Example:

(define b 12)
(define a (* b 2))

Note that doing:

(define a (* b 2))
(define b 12)

And then calling `a` would result in an error, as function calls are inlined
at the parsing stage. `b` there would have been inlined with the `void`
function, meaning a symbol was called that didn't exist at the time.
Made help message better