Changed 'filter' to 'walk'.

Filtering implies that elements might be removed from the stream, but this
isn't the case. Changed this to "walk" which avoids this implication.
Extended walk functions to pass user data around.

The bs_walk function now takes an additional parameter - void* data. This
parameter is in turn passed back to the called OPERATION in order to maintain
state between calls.
Modified combine operations to take user data.

Similar to the previous commit which made walk operations hand round user data,
this makes combine operations do the same.
Created a function to calculate the Hamming distance between two byte streams.