Added ThreadManager

Introduced ThreadManager that can handle the threads. This allows the
modules to be tested independently (they spawn a mock thread that
generates data). The Manager handles all the low level stuff like
signals, waiting for threads to finish, etc.
There's not much left of the main program except reading the config file
/ parsing command line args.