My first stab at this, so I may have gotten it horribly wrong, especially since this is a lazy pass.
I've preserved the way in which it is currently lazy, but any better suggestions are welcome.
Also, I'm not sure about the Optional<> result. And there's the somewhat ugly mutable member, but that's just instead of having the const_cast in the previous version. James, I think you introduced that, if you prefer to go back to the const_cast, I don't mind.
(I wanted to try to port something simple just to see how this works, and BDCE looked liked it ought to be simple enough - but it relies on DemandedBits, so...)
I would just call this "DemandedBits". In many cases, the original name was already a useful noun describing the results and query API and not really anything to do with the analysis.