Wrote a separate type hierarchy, adding a new bidirectoinal stream type.
Removed thunks and added a true function type.

Also rewrote the type checker.
Rewrote PipeObj and FileObj to use counters.

They are now reference counted, to avoid them from being deleted when
they are in use by functions.
Fixed a couple relative imports to use absolute paths.
Changed the existing tests to use functions.
Wrote two tests specifically used to test functions.
Added an additional bidirectional file type.
Made some minor fixes.
Rewrote the README file.