Move task execution to manager

This pull refactors several different things:
- The `Job` class has been removed, and the important information it retained was moved directly to the `Task` class
- `Task`s have been changed to their own output redirection. Set `output` property to a filelike and it will capture all task output (used to send specific task output via ipc, or to webui)
- `Task`s have been changed to handle changing the logging verbosity to their own setting. Previously the caller of `task.execute` was responsible
- ~~The main queue of tasks to be run has been moved to `Manager` from the scheduler. The manager thread is also responsible for executing the tasks in the queue now. This simplifies things, as we don't have to signal other threads to shutdown, they can all be declared as daemons, and will be killed when the main thread (now manager executing tasks from the queue) ends~~ This messed up graceful exiting on signals. Task runner has now been split into its own module/thread, however `execute` method has been left on manager, as has shutdown.
- The scheduler is now just a daemon thread which checks whether any schedules are due and tells the manager to execute them (we could now further optimize this thread to sleep until the next trigger is due instead of having a faster loop.)

- [x] possible issue: having handling in main thread may mean no graceful shutdown via sigterm. Task handling loop should probably run in its own thread.
- [x] Make sure webui and all other components are updated to not call scheduler for execution stuff