Make the expiring cache a top level cache type

Create a cache module type and adjust a few of its
methods to be more pythonic and then switch out the
work_based engines usage of it and adjust its tests
methods with adjusted methods using the new cache
types functionality.

Part of blueprint top-level-types

Change-Id: I75c4b7db6dd989ef328e9e14d4b00266b1c97a9f
Merge "Make the expiring cache a top level cache type"