Make list pods constant time

This moves all status-computing logic to the pod cache, and also starts caching more things (like whether a node exists). Will make it easier in the future to move status computation into a separate process or all the way down to kubelet.

Fixes #2951

Fixes #2975

Improves #2922

I'm having troubles running e2e. Will figure that out tomorrow and also squash.
It's only ok for now.  Imagine the person that comes in to refactor the code, and doesn't realize that the only reason that the scoping works is because of that return.

That's why it's evil, it's a time bomb for the future.  (and why did the Go folks have to make defer bound to the function scope and not the tightest enclosing scope, I mean _really_?)