Complete rewrite of core World data type.

- Switched from imperative-style code, with excess IO
  functions. Now doing 3 steps in a loop:
        - Read input (IO)
        - Process data recieved (Pure)
        - Output processed data, via rendering (IO)
- Changes Input data type to allow for events to be called
  either once on keypress, once on keyrelease, or repeated
  while key is down.