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.
Do we want to add an interface explicitly or is this temporary enough that doing so would be overkill?