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 
Why's that. I can turn this into

```
      userService.getMe()
        .then(function(me) {
            $scope.me = me;
            // Get the assignments for the current course
            return assignmentService.getAssignments();
        })
        .then(function(assignments) {
          $scope.assignments = assignments;
          // Get the gallery items
          return galleryService.getGalleryItems();
        })
        .then(function(items) {
          $scope.items = items;
          // Resize the iFrame Datacultures is running in
          utilService.resizeIFrame();
          // Restore the scroll position to the position the list
          // was in previously
          galleryService.restoreScrollPosition();
        });
```

but don't find this particularly easier to read