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.
I could group them but it be more for just visual organization purposes. I'm not sure what we would enforce unless we attached the keys to the Protocol enum and did some validation but that may be overkill/confusing without much benefit since right now the filter controls what keys it is looking for an ignores the others.