refactor the expectations loop. get that while/i++
out of there
Treat invariant more like a Then/And - Fixes #11

The existing implementation surprised me. An Invariant
is an assertion, why treat it just like another Given
block that happens to be invoked prior to every Then/And?

This may introduce some breaking changes to heavy
users of invariant (which is probably 4 people).