Make pipeline configurable after initialized

To change the pipeline after initialized, use PipelineInitializer
through AbstractTransport#resetPipelines() with copy-on-write semantics.

A StageKey is designated when a Stage is added to the pipeline.
The instance of StageKey is used to point the Stage in the pipeline.
Implements stage type check in pipeline

AbstractPipeline#verifyStageType() not only logs stage input/output
types but also verifies the type semantics.
Fix not to throw RuntimeException

A log message is written instead of throwing exception. There is
som possibility of the stage input type is not assinable from the
previous stage output type even if the type fails.
Merge NioChildTransport and NioClientSocketTransport