Began refactoring the ADT.

Began refactoring the ADT to add support for multiple data types and
compile time errors. The errors are being supported by passing an
environment variable around. This will allow checking for issues like
reading from a write only channel as well as allow for creating multiple
processes based off of a single generic process.