Master_job_caches

This is a fairly large overhaul of how the master stores minion returns-- so lets make sure that the tests pass first :)

The biggest problem (IMO) with how we handle minion return data is that it is very VERY inconsistent. Most runner/clients/libs/etc. end up copy/pasting a lot of code out of master.py and client/__init__.py. We already have an interface (returners) for writing job data somewhere, and there was already some code in here for an "master_ext_job_cache", so I figured we could do much better.

Basically this changes master_ext_job_cache to master_job_cache-- which is a returner the master should use to store/retrieve data. With this I've created a "local_cache" returner, which pulls all the job_cache code into one place. I then went around the code base trying to find people calling the cache directly-- and migrated them to this. Its possible that I've missed some things (there are a LOT of places that look at the cache directly), but i think i have most of them at least. This change is backwards compatible (unless you were using "master_ext_job_cache" which is an undocumented feature-- and as best i can tell no one uses-- mostly because it didn't quite work ;) ).

In addition to that, I've also created a multi_returner which will read/write from multiple returners. This will allow you to migrate between caches while maintaining the old one-- and it also means we don't have to deal with the complexity of list or not in the core. I'll add some more features to this in the future, I'm imagining some "ramp" control (hashing on the JID or some such).