Major rewrite to move from events + callbacks to Promises

Rewritten IO, Driver, Endpoint, and App layers.
Vastly simpler API at all levels due to all layers now returning promises instead of emitting events.