Add a generic protocol module type

Signed-off-by: John Else <john.else@citrix.com>
Capitalise module types

Signed-off-by: John Else <john.else@citrix.com>
Add a functor to turn a generic protocol into useful functions

Signed-off-by: John Else <john.else@citrix.com>