DSL: Introduce `SubFlow`s

Add `subFlow` support for `router`s
Move some tests to separate domain classes
Fix some component registrations
As you the next line (`this.subFlows.add(channel);`) provides this `channel` for the future bean registration: see `IntegrationFlowDefinition.route(R router, Consumer<RouterSpec<R>> routerConfigurer, 		Consumer<GenericEndpointSpec<R>> endpointConfigurer)` and further `IntegrationFlowBeanPostProcessor.processStandardIntegrationFlow`, where the last one iterates over `flow.getIntegrationComponents()`. Hance channels like this accepts the bean name based on the `IntegrationFlow` beanName. 
Here is a note on the matter: https://github.com/spring-projects/spring-integration-extensions/wiki/Spring-Integration-Java-DSL-Reference#channels.

I agree that the bean name for the `subFlow` is bad right now, because it is generated using `BF` algorithm. Therefore anonymous channels in the that `subFlow` get bean names like this:
```
org.springframework.integration.dsl.IntegrationFlowBuilder$StandardIntegrationFlow#0.channel#0
```
So, I think I can make `subFlows` (in fact `StandardIntegrationFlow`) as `BeanNameAware, NamedComponent` and use the beanName from their parent `IntegrationFlow` bean definition.
In the end those subFlow's channel can make the bean name like this (for current `router` sample):
```
routeFlow.subFlow#0.channel#0
routeFlow.subFlow#1.channel#0
routeFlow.subFlow#1.channel#1
```
WDYT?