Implement and test state machinery, and peekable/chainable input sources
o Implement general purpose iterables, with look-ahead/push-back, and chaining
  of iterables to allow loading of input into existing state machine transition
  event generator
o Follow None (no-input) transitions only if no better transition matches
o The transition generator will continuously return non-transition events until
  self.process() is invoked, and an outgoing state transition event is yielded
  (or the input source stream fails).  This ensures that each state's process
  will be invoked exactly once before either A) yielding a state transition out
  of the state, or B) the state is determined to be a terminal state.
o A framework for lazily evaluating strings is implemented, to ensure that
  processing of expensive logging output can be efficiently elided at lower
  logging levels.  o Implement unit tests