Refine flow through system with better template programming.

We separated the structure (input-output flow) from the rest of the architecture and reworked some template programming to have better access to the types required at compile time.
4 jobs from dataflow in 34 seconds (queued for 3 seconds)
Status Job ID Name Coverage
  Build
passed #3224
build_cmake

00:19

 
  Test
failed #3225
run_tests

00:15

 
  Sanitizer
skipped #3227
run_address_sanitizer
skipped #3226
run_thread_sanitizer
 
Test run_tests
     buffer_size_ = invocations_.capacity();
make[2]: *** [app/playground/CMakeFiles/playground.dir/main.cpp.o] Error 1
app/playground/CMakeFiles/playground.dir/build.make:62: recipe for target 'app/playground/CMakeFiles/playground.dir/main.cpp.o' failed
make[1]: *** [app/playground/CMakeFiles/playground.dir/all] Error 2
CMakeFiles/Makefile2:191: recipe for target 'app/playground/CMakeFiles/playground.dir/all' failed
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2
./ci_scripts/run_tests.sh: line 9: ./bin/tests: No such file or directory
ERROR: Job failed: exit code 1