Remove read and write functions (it's shorter code and more transparent to
perform the read/write directly).
Tidy up engine variable initialization.
Change method receiver names and function parameter names to idiomatic Go.

https://groups.google.com/forum/#!topic/golang-nuts/73npFHhuL9k provides
a discussion of using "self".
Refactor NewEngine so it's shorter and clearer what's going on, with
associated changes to the main event loop so it's no longer deeply
nested.
Refactor engine to safely handle concurrent send (transmit) requests.

Also make transmit and receive consistent from an engine error
detection, reporting and lifecycle control perspective.
Simplify engine by starting goroutines from NewEngine.
Minor channel direction declarations.
Docs only.