Remove some complexity from the hash updater
Remove some complexity from the hash updater

The Peekable iterator expects to need to handle the end of the iterator
at any time.  This causes some complications because it holds on to a
mutable reference too long.  In addition, the code becomes a bit more
complex, just needing to handle this case.  Clean this up with some
refactoring of the code:

- Store the head of each iterator in 'left' and 'right'.  We punt at the
  end of the iterator, since we know the state because it is a proper
  tree, by just storing a dummy value.
- Change the visitors to use Result instead of a custom type, so that
  '?' can be used throughout.

With these changes, the rest of the code becomes a bit simpler.

d3zd3z/rsure