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?
So, this isn't explicit in the contributing doc (will now add it), but I like to keep methods alphabetized. Throw this up above and I'm ready to merge.