PERF/DISC: Cache .loc, .at and reset whenever index/columns change
Series.index, DataFrame.index, and DataFrame.columns are `AxisProperty`s and whenever they are set, a callback updates the underlying BlockManager.

We could have that same callback also invalidate the cached `obj.loc` and `obj.at` objects.

If we did that, then `LocIndexer` and `AtIndexer` could assume that they would only ever see set of axes, so a bunch of checks that are now done at lookup-time could be cached or otherwise de-duplicated.

No idea what the perf impact would look like.  Thoughts?