Implemented AlgorithmFactory

This greatly simplifies registering of algorithms; no more need to
include directories/headers, simplified CMakeLists.txt
Updated submodules