Fix fsm.want's caching behavior

Prior to these changes, fsm.want would cache locally. This is invalid
as a want can peek data, but that data is no longer available to the
through handler.

That is an issue that was stumbled upon after discovering a much larger
issue that this commit addresses.  Essentially, if you do not meet the
want in "this tick" the do/while will push the same buffer into want
until it is satisfied.

This commit fixes both of these behaviors, and maintains backwards
compatibility (namely returning a function inside of a state.
see the 'calculated want' test).
bump 0.2.1