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.
We'd have to have each key have a setter to set the chosen strategy or actually create new key instances once we've determined the strategy.  I'm personally not a huge fan of either.  I don't think they'll work well.