Fixed the unittests.

Made the user menu stuff its own template and made that template work
for both regular and anonymous users.  This removes the duplicate code
in header.html and base.html

Fixed warning when trying to cache things by the anonymous user.
Cache the sharing widget on the video page

Refactored share_utils a bit, that code was super ugly.

Simplified RTL calculation for videos.  There's no need to fetch the
subtitle version to look that up.
Cache the video page title

This shouldn't be needed once we implement #1463, but for now this
saves some DB queries on the page.
Add more functionality to CacheGroup

Added a bunch of code to integrate CacheGroup code with django model
class.  This should be able to replace the code in Video and
CustomUser to create a cache group for an instance.  In fact it should
be a nice improvement because with a cache pattern, we should be able
to fetch the instance and all cached values for that instance in using
a single get_many() call.

I think that this can achieve the dream of 0 DB queries for the video
page.  Using this code I think we should be able to handle the entire
page with the following 3 cache queries:

  - fetch the user and all its cached values from the cache
  - fetch the video and all it's cached values from the cache
  - (optionally) fetch the team and all its cached values from the
    cache.

Also added a convenience function to get a value from the cache and if
there's a cache miss compute it.
Switched classes to use ModelCacheManager

Added test function that can be used to test if a model's cache is
invalidated.
Migrated code to use the new cache group functionality

Removed the update view counter code from the video page (#1879).

Added way to get request.user from the user cache.

We now perform 0 DB queries once the video page is cached.

Changed video views to return 403 errors instead of 404 if there is a
permissions error.  This seems like the more correct code to return.