Further work on RPC, update workflow tests

Here for review rather than pulling (it will need rebasing/fixing when @fommil 's PR is taken.
Further work on the RPC protocol as a callable interface.  Work was done so that Project has no references or dependencies on the protocol.  Refactored the workflow test that use the RPC interface directly.   This has made extending the test a lot easier and I've managed to increase the coverage to >70% 
It looks like `asyncs` is growing without bound. With the previous code, it would grow only when in the "waiting" state.  I'm not sure how to fix this and keep the SubscribeAsync semantics. Maybe separate the "subscribe" and "replay" functions, and allow "replay" to be called only once after which `async` is no longer updated.