Add ability to set requirements for task

So this adds many to many association for task model to be able to add task requirements, also defines model methods ```#locked?``` and ```#locked_by``` to determine whether task requires another tasks to be accomplished