Cache applicable definitionLists for ChangeNodes

Take advantage of ChangeNodes whose subNodes do not require a reload to
cache applicable, filtered lists, per branch. For non Change Nodes, the
subNodes lists, including applicable, filtered subNode Lists are already
cached per branch. However for ChangeNodes these caches are always empty
since ChangeNodes are not reused (due to their name changing).  Much of
the benefits of this missed caching can be achieved for ChangeNodes by
at least caching definitionLists instead of NodeLists. This is already
being done for the full definitionList for ChangeNodes, so do it also
for the applicable, filtered definitionLists, per branch.

In a sample walking ancestors use case, this definitionList caching for
over 33K ChangeNodes results applicable nodelists being evaluated less
than 300 times! The performance gain in the case of a task.config which
walks all dependencies for a change run with status:open --no-limit
--task--applicable is very significant, around three times as fast:

Before this change:  15m14s 15m46s 17m37s 15m24s 15m11s
After this change:    4m47s  4m56s  4m22s  5m5s   4m27s

Change-Id: I6a7ef48b028e901179a0767734aec709bec9c7cd
4 files changed