Moved to ContextKey enums throughout codebase to help unification of context keys

Also fixed StreamAwareFixedJoinFunction to produce multiple output streams as handled by the existing NamedNodeComponent (all contexts are tagged with the appropriate stream within the function and returned as part of the result from apply.  The fire method then investigates the stream name in the context to determine which stream to send it on in the built network).  This also meant reducing the requirements of the BufferedOutputStreams interface.