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
Declare timer sentinel, remove force to bool, set NOMINMAX, use std::min.