CYB-367 - Window scroll in Gallery is making it hard to navigate

https://jira.ets.berkeley.edu/jira/browse/CYB-367

This PR does a number of different things:

- Prevent the full gallery list from being reloaded on every page view
- Implement iFrame resizing for all 3 LTI tools
- Implement scroll position caching for the gallery tool
- Improved sorting in engagement index
- Fixed bug in liking/disliking code
- Fixed removed activities bug in Points Configuration (https://jira.ets.berkeley.edu/jira/browse/CYB-212)
- UI code simplification where possible
- Consistently use Services, Factories and Controllers
- Added significant documentation throughout the UI codebase
- Added pointers for possible REST API improvements

As this is my first significant work using Angular, I would appreciate a thorough review that completely picks this apart ;) /cc @christianv @raydavis 
@nicolaasmatthijs it's what we used before in `dataculturesController.js`. There we also exposed the api to the view so we can use it anywhere.

https://github.com/ets-berkeley-edu/calcentral/blob/d23574a1fd44584ed8709af5daad9e3bd699cc4b/app/assets/javascripts/angular/controllers/calcentralController.js#L9
https://github.com/ets-berkeley-edu/calcentral/blob/d23574a1fd44584ed8709af5daad9e3bd699cc4b/app/assets/javascripts/angular/services/apiService.js
https://github.com/ets-berkeley-edu/calcentral/blob/d23574a1fd44584ed8709af5daad9e3bd699cc4b/app/assets/javascripts/angular/services/utilService.js

It's definitely a trade-off, and I'm fine either way. My personal inclination is to keep things more DRY.