Removed some cruft code and re-documented some stuff.

A great breakthrough was made today.  The main function can now be simple
like I wanted it to be.

However, there are still some usability problems.

First of all, the type class takes four parameters.  I think that's too
much.  The OutputEmulator type is actually known from the Input,
InputEmulator, and Output types.  So it should be possible to make
OutputEmulator not be a parameter.

Ideally, the CanBe type class should only have two parameters: input and
inputEmulator.  I don't know if that's possible, though.

Second problem: you have to write the type signature of the main function
to get it to compile.  This is a usability annoyance that needs to be
fixed.