Added ability to make cacheable keys

Created a cacheable trait and interface that allows custom expire times for AbstractKey objects.