load_protocol now optionally accepts a Config instead of a config file path, allowing protocol instances to be spawned from code easier.
TODO: Subclass Config to create MemoryConfig that is essentially a read-only dict.