Generic cache implementation that uses go generics. Mainly just an excuse to get familiar with go generics, but possibly useful.