First commit for creating groups

- two new models have been created - Groups and GroupsAndCoursesAndUsers
- moved upload constants to current_app - eg. directories
- moved some common upload functions to attachment
- created an alembic upgrade script to create the two new models
- currently the file format is username, group name; however this
is temporary

- NEED TO UPGRADE DATABASE
Refactored class import

I've modified the api to only return error messages and number of
successful enrolment instead of returning all the details we can
generate - including the students that were dropped. We assume,
instructors may be overwhelmed with all the information and do not
need to know all these details.

So now, the user is redirected to the Manage Users view if there
are no errors. They are only redirected to the "Results" page if
there are errors
added column to display group name in classlist view
implemented enroling and unenroling users from groups

The group column in class list view now displays a column of dropdown
menus with the group the user is enroled in selected. If the user is not
in a group, the default value "-- None --" is selected.

To change the group, all the instructor needs to do is change the value
in the dropdown value. A success message will appear when it's done

To just remove them from a group, "-- None --" should be selected.
Again, a success message will appear.
created tests for group api

- also refactored some of the api functions to not proceed if the
user is already dropped from the course or the group is inactive

TODO:
- add permissions to the api
- adjust the tests to reflect the addition of permissions
added permissions checking to the group api

- Currently instructors can READ, POST, and DELETE Groups and
GroupsAndCoursesAndUsers
- Meanwhile, TAs can only READ Groups and GroupsAndCoursesAndUsers
- I've also added backend tests for these changes