enforce note perms in comm, refactor perm code /w tests (bug 927871)

The permissions in ```CommunicationNote``` were not actually being enforced at the object-level. 

- Adds permission checking for notes at object-level, especially for API list views.
- Move permission code to ```comm/models.py``` and refactor.
- Created functions to check permissions for both threads and notes given the object and user to check against.
- Full coverage tests (none had previously existed) and bug fixes for permissions.
- Custom CommunicationNoteManager that has method for permissions.