Enable per-user access control on Task objects

* "Per-user" instead of "per-context" because Tasks may contain
  information from a context that one user can see, but another user
  cannot
* Add `user` parameter to `create_task`, and ensure `modified_by_id` is
  set on new Task objects
* Add permissions to `ProgramBasicReader`, `AuditorReader`, and
  `ObjectEditor` to `Task` objects using the condition that
  `modified_by` attribute matches the requesting user
* Add implication for `ProgramReader`, `ProgramEditor`, and
  `ProgramOwner` to `ProgramBasicReader` in the "common" context