Simplified some worker logic

1. Don't do string magic on the scheduler to break down a task into a task family and parameters
   Instead, send it as an argument when scheduling the task
   This is useful because it's a step towards remote execution
2. Cleanup of worker code
   There was three different code paths leading up to add_task(...) - cleaned up so that there's only one