reduce mutable state

This PR is a slight refactor that reduces the use of ivars, preferring methods instead. This made it substantially easier to debug the gem itself in the context of my application (since these methods would be hit in-line during execution, rather than at initialization).

What do you think?
sure, that's easy enough to change