Better @memoized decorator

This version of the @memoized decorator only keeps weak references to
the function arguments in cache, which means that it doesn't keep
objects alive forever, and that it won't fill up all available memory
eventually, as the old version would -- it only keeps cache for the
objects that are actually in use.

Honestly, I'm not actually sure that the effect is worth it, as the
level of complexity of this code is quite high. I thought I would
submit it anyways, so that we can at least have a discussion.

Change-Id: I3a4fca3aba7c52102673f7fa5d127873c71516f8
Partial-Bug: #1098047
Add more Horizon unit tests.

Increse horizon base (+2%) and middleware (+10%) coverage by
adding 6 new tests.

Change-Id: Ibd0f7f43885ee447369a9beaccab7befbbc45ca4
Show volume quota graphs if totalVolumesUsed >= 0

commit 9bca5d3680ee21d2b92ba6766f13b5d216fc477f fixed the
volume quota display, but quotas are hidden if a project has a used
quota of 0. I don't think we should hide the quotas in this case,
as users still need to know how much quota is available, even if they
haven't used any of it yet.

Change-Id: I72c0fae1a51cafabfcde8970c94097069083dd06
Partial-Bug: #1244875
Increase Keypair name size to 255

The keypair name in horizon has a max_length of 20 characters, it seems short.
We should just match the nova data model length, and set the max_length to 255
for consistency.

Change-Id: I53e43a792da677c39127ab43831dde5f70e588d3
Closes-Bug: #1257030
Inline Table editing

Implementation of inline-table-editing blueprint:

- Design from jcoufal is implemented with Bootstrap elements.
- Inline edit mode implemented, Django Form Field connected to table
  logic, using Django Form Widget to render. Table Cell can be updated
  and refreshed.
- Allowed method implemented for checking of cell edit permissions
- Validation process is taken from Django Form Field logic, so
  validation is defined as part of Django Form Field defined in table
  Column.
- Update method of the cell is defined as Table Action. For obtaining
  row data, UpdateRow functionality is used.
- Horizon Tests for inline editing implemented.
- Selenium Tests for inline editing of tenants implemented
- Documentation written in both ref and topics

Change-Id: Ib29b58da71d3a8abc9688bc942fe49917161e97a
Implements: blueprint inline-table-editing
Merge "Show volume quota graphs if totalVolumesUsed >= 0"
Merge "Better @memoized decorator"
Merge "Increase Keypair name size to 255"
Merge "Add more Horizon unit tests."
Merge "Inline Table editing"