Do not use set union in the allocator transfer function

For the store case, we only care about the *last* value stored
to an output parameter.  So we overwrite instead of adding to the
existing set.
Fix the transitive out allocator case.

This required a bit of shuffling, but things are cleaner now
anyway.
Clean up a really ugly expression by giving it a name
Weaken dependency lenses to getters

This follows the weakened requirements in
travitch/llvm-analysis@dac47adf8157fc4e62e7dffbe5a05c177ce3eb64