More major overhauls.
- Adding IChainSerializer, which is a currency-level parameter that can convert blocks and transactions to/from their canonical serialized form.
--- When I finish making this more prominently used, this will replace ProtocolX.
--- The "canonical serialized form" for everything shows up when reading blocks / transactions from a stream and when calculating identifiers.
--- It's also useful big-time in the short run for space savings when serializing / deserializing, because we no longer need to create intermediate representations.
- Decoupling IValueSpender from IValueSource.
--- This simplifies the implementation of IChainSerializer, at the expense of only a minor part of my soul (since my interfaces map pretty much exactly to the data contained in protocol messages).
--- I can live with it, though.  This model still permits a more usable abstraction layer on top of the core protocol stuff: everything important is interfaced, and I think I've done a decently fair job at separating services out into pillars.
- Fixing a couple of major defects in FancyByteArray.

Also a note, don't bother trying to use the chain stores other than MemoryChainStore with the WIP application.  There's too much (and simultaneously not enough) "cheating" involved here, and I don't think that persisted data will get loaded back in properly when we do the startup scan.