Add a session cache of can_access call results

This patch adds a decorator and function to all horizon components so
that the results of calls to can_access are cached in the session. This
should prevent large numbers of calls to APIs when can_access functions
need to get information from services. The cache is stored in
session['allowed'] using self.__class__ as the key, this ensures each
key is human readable and can be easily mocked out in future tests.

Change-Id: Ic65e4cb6499ecae4b09dd525416656a6f41853f5
Closes-Bug: 1367716
Merge "Add a session cache of can_access call results"