Rename msvc bitcoin-client to example-client
Move the obelisk stuff into its own folder
Remove obelisk_router::set_message_stream

Changing this in mid-communication would break the state machine.
If a client wants to change streams,
they should just create a new obelisk_codec instance.
Do not pass std::function by reference

The Visual Studio compiler has trouble automatically constructing
std::function rvalue references from non-member, non-lambda functions.
Plus, rvalue references make the API more confusing.

Given this, the most efficient approach is to pass std::function by value.
This allows each stage to take advantage of std::move,
passing the contents along to their final target in a zero-copy manner.

Passing std::function by const reference would require a deep copy
at the final step in the process, so it's actually less efficient.
Do not pass shared_ptr's by reference

The whole point of this class is to enable ownership semantics,
whereas references imply that the caller maintains ownership.

Plus, non-const references cannot accept anonymous rvalues.
This makes the function harder to call.
Split the obelisk codec into two parts

One part handles the request/reply matching,
and the other handles the individual message encoding.
Remove enable_sideeffects from sleeper interface
Add unit tests for obelisk message encoding
Fix API data widths
Use build_data instead of serializer for obelisk
Declare timer sentinel, remove force to bool, set NOMINMAX, use std::min.