Add type definitions for the Engine monad.
Translate first set of functions to use the EngineM monad.

This will break the build. I guarantee it.
Lift pretty-printing functions into EngineM.
Move engine utility functions to EngineM.
Fix type-errors in existing migrated EngineM functions.
Migrate endpoint accessors to EngineM, with some more generic*.
Fix missing call to num* in statistics.
Fix missing return in simulation.
Fix missing filter in deregisterNetworkListener.
Fix monad issues in runMessages/processMessage.
Migrate runEngine to EngineM.

We may want to change the name, it's a bit meta right now.
Move terminate/cleanup to EngineM.
Migrate queue accessors to EngineM.
Migrate internal-endpoint methods to EngineM.
Fix incorrect precedence issues in endpoint methods.
Fix show instance for Engines.
Migrate debugQueues to EngineM.
Migrate endpoint notifier functions to EngineM.
Migrate connection and connection-map accessors to EngineM.
Fix missing cases in addConnection.