BROKEN: Initial commit with a broken source file.

This is because Git will not allow you to add new files and then switch branches without commiting. Never pull this commit. If you see this commit message, pull a different branch.
Added the campaign assignment API.

The campaign assignment API allows the requesting user to assign a campaign to another user with a corresponding campaign mask. This mask describes what subset of the surveys the user should see. This means that, if the campaign is visible to a user, only a certain subset of the surveys will be returned in the campaign definition.

This API also allows the requesting user to create a new account. The account will not be an admin and will not be able to create campaigns. It will be ready to use and will not require a password reset.

This API also allows the requesting user to add the user to a class. The class must exist and the requesting user must be privileged in that class. The user being assigned will be restricted in the class. If the user is already associated with the class, their permissions in that class will not change. While the API creates the appropraite campaign/survey mask for the user, the class association makes the campaign visible to the user.

This is an incomplete feature because the campaign/read has not yet been modified to adhere to the mask.

References #493
Added a survey response creation call.

The survey response being uploaded was not being saved. This has been fixed.

References #493
This includes documentation but no substantial changes.
Merge branch 'ohmage-2.15' of github.com:cens/ohmageServer into ohmage-2.15-campaign-assignment
Added the campaign mask when reading a campaign's definition.

This is done by building the Campaign object, then building the CampaignMask objects, then assigning the CampaignMask objects to the campaign. A better way would be to have them associated, but not necessarily contained in the actual Campaign object. This way, a memcached-like system could cache the campaign definition and the masks independantly, so when a different user asks for the same campaign, the cached campaign can be retrieved and the new masks, if any, could be retrieved and applied independantly.

References #493
Added the campaign mask SQL files.

References #493
Fixed a bug and performed code cleanup.

There was a code cleanup when reading campaigns. This introduced a bug and required some further cleanup.