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.