requires protocols programmatically (squashed)

add hardcoded Transform() stream to backend and changed tests

you can use 'log: true' in options to put on logging for a particular
test

client also get options object

client also creates corresponding stream (currently same stream for
all protocols)

basic sending and receiving of information is possible, next move is
to refactor out the hardcoded Transform() and somehow load it
 like a plugin with require()

remove stream.write from test

rename backend.js to fs-backend.js

renamed mdm.js to util.js, will end up more common stuff in there

refactored server/client naming, call it mdm (adopting julian grubers
design here) it doesnt matter if it's a server or client, it's both!

refactored speak into util.js, just bind it to the backend when calling

rewrote some tests, there should be three different cases of tests when
opening a protocol, we're currently handling the scenarios where either
both speaks the protocol and when both of them don't

need to handle the case where the client speaks it and the server don't
we don't need to check when both don't speak, since the client not
speaking is taken care of by another test

add test to check for error on server

strengthened some tests and add support for both configuring
the client and the server node with separate options hashes

refactor tests and logging

made protocol file system code async

require() protocol stream programmatically