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
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
Merge "Show volume quota graphs if totalVolumesUsed >= 0"
Merge "Better @memoized decorator"
Merge "Increase Keypair name size to 255"