Code review PR: RPC, libdevnet, RLPX

This pull request is for RPC support, WebThree, and libdevnet, an experimental library which supports full-duplex, asynchronous, and synchronous protocols. Third is also implemented but not usable in it's current form. It's expected to support exposing shared interfaces (e.g., RPC), encryption, framing (QoS, bandwidth optimization), and channels. Together with streaming and asynchronous support, this also means "push" is available for otherwise-synchronous protocols. The service listener (Endpoint), connections, and protocols are decoupled from each other, although Service is coupled to a protocol (via template parameters).

Notably, a 'protocol state' can out-live it's connection, services can be used without an endpoint, protocols can be used without an endpoint or service, and connections can be used on their own.

This introduces a "Protocol" class which can implement any of: interpretation, encapsulation, protocol state, and connection state. And, where a Service is used, the service may perform these duties instead.

This enables a developer to build and adapt layered protocols independent of the underlying RLPX protocol. Ideally, encryption and framing can be added to RLPX without downstream changes and downstream application protocols are guaranteed not to introduce interference.

That would be ideal. If WhisperHost is designed around the idea that there may not be any shh peers to communicate with, and that it's connection is volatile, then availability/state information will be present which can be used to guard functionality.
The only issue I've found with this approach is that HostCapability has a pointer to Host, so it's possible that the Host is deallocated while being called from HostCapability. Change HostCapability::m_host a weak_ptr instead of a pointer would resolve this.