Change the RPC insterface to be call/response

A large PR - but in may ways pretty simple - RPCTarget now returns the results inline rather than relying on the infrastructure to correctly respond.  This moves nearly all of the protocol handling into the protcol module (there is another PR to fully seperate the core from the protocol.

@fommil / @edani / @aemoncannon / @marcsaegesser  This needs a solid kick around before merging as it could have easily broken something.  It subtly changes the call behaviour as every call now has timeouts (currently all defaulting to 30seconds but configurable on a case by case basis.