Before, we create the set of abstract attributes initially and then
dealt with the fact hat a lookup could fail, e.g., return a nullptr.
This patch will ensure we always return a valid object from a lookup,
allowing us not only to remove the nullptr checks but also to grow the
set of abstract attributes we look at on-demand. One can now start from
those that have the best chance of improving performance without the
need to specify all they might depend on.
Note: A lot of the minor adjustments that are not related to the switch
from pointers to references will go in the preparation patches already under review. These patches and this one will be updated accordingly.