Aggressive Refactor to OO

Hi Nick,

I saw your post on /r/ruby and thought this would be a fun exercise to try and wrap my head around/refactor.  I tried to extract the concerns of the system into distinct objects.  There is still some potential cleanup to do, and naming is still kinda up in the air (I had fun with some names).

Let me know what you think and/or if you have questions. Cool problem.

--
Luke