Ensuring ineligible persons are not participants, Change #2828

The original implementation to add the necessary behavior is [here](https://gist.github.com/greenone1975/4707723). I thought this method was doing too much, so I decomposed the behavior into as many discrete functions as I could. Tested these individually (even though they were private) and ran into some difficulty coming up with useful ways to test the composing method. 

After a discussion with Paul and Rhett, I was introduced to the [Data Context Interaction] ( http://rubysource.com/dci-the-evolution-of-the-object-oriented-paradigm/) paradigm, and the last commits are my attempt to glean, at least partially, and to the extent of my early understanding of the practice, some of the benefits it provides. The most important of which is the separation of logic away from where it doesn't belong, and into a more logical "process" class that's based on the particular use case I am trying to satisfy.