Pods 2.5 optimizations work

This is a general PR for all the 2.x-optimizations work done so far by @jamesgol / @pglewis; to ensure we can see a full big picture of the changes. This will make it easier to review everything as it currently is (or becomes) and I can comment on the difference lines.
Very likely, if someone calls field() in the same script, then modifies the data it will still have this cached.  At one point I had a // @todo in there but it must have gotten dropped when moving between one of many different branches I was working on.

BTW: This isn't cached in a transient