chore(cache): reworks ElggMemcache and its core usage and adds a null cache to simplify logic

The goal here was to leave the ElggMemcache API as is, and simplify its use in core without requiring a radical (bug inducing) refactoring.

The big benefit here is that, since this uses a Stash pool internally, a dev could easily set this up to use APC, files, or any other Stash storage model.