Eliminates duplicate Canvas API calls

- A large amount of the changes is moving code chunks from controllers.py to canvas.py
- Some of the code chunks moved has been updated with a few line changes
- Imports updated to reflect changes

Overview: This moves the controller functions that have common calls to the Canvas API into its own class, CanvasModules, now located in canvas.py. As a result of this, we remove duplicate calls to the Canvas API in some of our view function and simplify the parameter set that these controller functions need to take.

@zags 
We could do better here by checking if the domain of the external urls matches the domain of the AB server, once that is finalized. However, this assumption is actually relatively safe to make since any calls to `get_installed_intervention_points` is checked against urls in the database. I believe the only way this assumption would be violated is if user put into the AB tool database the url of another External Tool as the url of an Intervention Point; I'm sure how sensible that user behavior is.