Major backend update

Removed the internal UIMonad in favor of the whole thing being an arrow.
This should reduce the need for many delays that were previously
necessary to prevent blackholes.  It should also improve performance of
IO tasks.