A level of abstraction is needed here so other transport backends can be supported without a code change to blueflood-core being required.

See the way discovery, ingestion, and query modules are loaded for examples.