Refactoring

Refactorings @garrettqmartin8 and I paired on. The biggest was to extract a `HasStreak::Streak` class (the new class probably needs moving into a new file, and maybe wants to unit tests of its own, too).