feat(INThread): add methods for updating thread tags

INThread#updateTags(), and convenience methods INThread#addTags() and INThread#removeTags(), are each
used for updating a thread with new tags, or removing old ones which are no longer needed.
test(INThread): refactor creation of thread mocks in test suite
feat(INThread): implement INThread#hasTag() method

Simple routine to determine if a given thread has a particular tag. O(n).
refactor(INThread): implement helper method for requesting collections owned by threads
feat(INThread): implement INThread#drafts() method

Simple routine for fetching collection of draft messages, built on threadRequestHelper().

Tests to be implemented later
feat(INFile): implement routine for downloading file asynchronously

INFile#download() enables authors to download a file without relying on the browser, and with
the benefit of being able to send authentication information easily.

This API is a work in progress and is prone to change, do not treat as stable!
fix(INFile): address changes to API, add method to fetch file data

INMessage#getAttachments() will fetch files attached to the message from the server, using the
typical motif of these API request methods (supports passing in an array of files to update,
as well as an object of filter keys).

INFile#download() will attempt to download an attachment asynchronously (requires XHR2)

INMessage#attachmentIDs has been removed, and replaced with INMessage#attachmentData, containing
all of the data for each file.
fix(INNamespace): correct url for INNamespace#tags()

Previously was requesting /n/<namespace_id>/threads, should be /n/<namespace_id>/tags
fix(capitalizeString): return value from capitalizeString()

Also adds tests which were previously missing.
chore(namespace): Converting tabs to spaces