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
This sort of ties into what I suggested on `locked_for?` — `task.locked_by user` doesn't suggest that it returns a list of tasks that is currently blocking this task from being completed, but rather that it returns a boolean that describes whether the task is locked by the given user or something. I'm not sure how we could name it differently, though, or if it's just me who reads it that way.

What do you think, @hyperoslo/owners?