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.
Does it make sense in the design for each ConfigurationKey to also hold a reference to the strategy somehow? I am thinking that might simplify the process such that you could introduce a `getValue` method on each key, that would call the strategy, and return the default value if none is available. It would also remove the getString/getBoolean calls from the base because you know the type inside the key itself.

I am just not sure if it's practical, or how much more coupling that would introduce.