remove throw specs and throw macros
use %g for json floating point output
Generally renovate json_stream:
  add inline on inline function in header (would be link error)
  restore ostream's flags in jsonstream destructor
  char, char16_t, and char32_t are not treated as integers
    (signed char and unsigned char are)
  use [=] in lambdas for small values
  eliminate need for json_stream.cc through creative enum use
  change "x" to 'x' in ostream <<
  reduce object bloat by making transition() call non-template _transition()
  merge duplicated code in _transition()
do not include strerror(0) in exception message
is_not_optional<> might be useful
optional<> needs emplace type
standardize include guards
omit needless "s."; use forwarded setsockopt
fds: cosmetic cleanups; consistent ctor patterns; forward fcntl() to socket interface
omit needless returns of void
do not assume address is AF_INET 0
address renovation: default family invalid (AF_UNSPEC).  dtrt for all cases when family is AF_UNSPEC.  check addr lengths.  use optional<>.
fix display of optional<addr>
fix display of agent_ip() again
types proc_clock_t and proc_time_t, so procnow() et al are more usable
clarify safe_lock<> a bit; forbid copying it
minimize string copying; add http_headers.contains(); make http_headers::find() private
http client lifetime: discard and optionally replace after fixed time
use =default for chain move ctor
fix reversed test on http date; unique_lock -> lock_guard