Core language implemented, naive parallelism implemented

Several changes were made to the reducer. Beta reduction now adds
expressions to the lookup table instead of reducing lambdas in place.
the "if" function in the "base.par" file is now not in use since
strictness evaluates both branches.

Changes
* Implemented random in language
* Beta reduction uses lookup table instead of binding
* Naive implementation of parallelism
* implemented prettyprinter for expressions
* Reducer has access to an environment instead of a lookup table

Issues
* Language does not handle variable bindings in nested higher order
functions