Allow input iterators to be used as input to the hash functions digest

and update. The length of the range is unknown up front.

Add tests for iterator based input method

Add tests for splitting the input into multiple updates. As a result of adding
these tests I discovered that the input can only be split at byte boundaries.
If we want to change this we will have to change stuff_into_state to handle
an unaligned destination.