constprop: Add facility for widening arguments before constprop
There are various situations where we may want to constprop with
something other than the most precise concrete arguments in order
to make the resulting cache more useful to other call sites. One
particular example of this might be a method where non-concrete
inference already discovered that one argument is unused:
```
function foo(a, b::DispatchOnly)
expensive_to_compile(a)
end
```
Right now, we will generally perform constprop for every different
value of `b`, even though we already have the information that `b`
is unused.
Another example is external absints that may want to treat certain
types fully symbolically. They may want to substitute concrete values
for an abstract domain.
This adds the facility to do both of these things by
1. Adding an appropriate interp hook in the constprop path
2. Adding a WidendedSimpleArgtypes wrapper that's like SimpleArgtypes but
works around an issue where we would override cache information using
values from concrete eval, which is not legal if the argtypes were
widened.