Casc 200 rebasefail

This pull request works on CASC-200.  Please ignore the previous pull request (I'll close it) as I accidentally re-based a remote branch which you cannot do and in the process made additional changes :-(

This introduces a few things:
1. Configuration strategies
2. Configuration keys
3. a simple Protocol enum to separate protocol stuff from configuration

I realized there are a few javadocs I need to fix.
Could we do the same stuff inside the constructor?  Possibly, but this is more explicit on what the contract is (since interfaces don't have default constructors).  I'd prefer an explicit contract for something that is required.