This actually changes less than it appears. computeKnownBits will chose it's own context if one is not passed in. However, since it doesn't know which function is being queried, it can't use an context for the non-instruction case. So the only actual change in behavior here is for arguments, global values, etc..
The test changes are a bit weird, but I left them in (as opposed to rebasing over them) as I think it's relevant. The interesting instruction has to come before the assume or the ephemeral value logic ignores the assume. That's, well, a bit weird.