v4.0.0: Logging and protocol

-- Logging --
* The logging framework, whilst backwards-compatible, has been much improved --
  loggers, not just files, can now be chained together. See the new
  `log.LoggingNode()` class.
* In addition, custom log event types are now better supported. The new default
  for allowed log types is now `None`, rather than a tuple of the default event
  types.

-- Protocol --
* FirstByte() has been upgraded to FirstBytes(), which includes an additional
  4-byte hex number indicating payload length. As FirstByte() made the protocol
  safe for long messages, so FirstBytes() makes the protocol more robust on
  clogged networks.

-- Other --
* Changed all `lock.acquire()/release()` pairs into the `with lock:` context
  management format. This is slightly slower (.02 microseconds more per run on
  my computer), but the robustness gained should be worth it.
* Improved several doc-strings.
* Updated docs/speed.md.