This patch introduces utility class which helps to request analysis in a lazy fashion. It automatically manages invalidation and updates of predefined set of analysis behind the scene. JumpThreading already uses the same idea but has implementation covering its needs only. This is an attempt to generalize the solution so it can be used in other similar cases. It doesn't replace existing functionality of analysis managers. Instead it introduces a convenient way to have a local cache of analysis results (aka. LoopInfo* LI class member) that automatically updated when needed. The benefit of having such an utility class (as opposite to using analysis manager API directly) is minimized probability of introducing new bugs due to well defined API and extra internal verifications.
Please let me know if like the idea or not. If I have a green light I can split this patch and introduce new functionality by steps.