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
I think just `locked?` with no arguments would be great, but since we're passing an author it may read better if we rename this method to `locked_for?` instead? That is to say `task.locked_for? user` instead of `task.locked? user`. 

What do you think?