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.
Is this really necessary? Cant we just do the same "stuff" inside the ctor of the impl? Introducing implicit ordering is a bit risky to assume, right? I suppose you explicitly wanted to make the parameters be part of the API to let impls know they could expect such objects? But even so, the ctor would do the same, right? It's just slightly hidden more.