Teach the unsequenced operation checker about references, members (including static members) and structured bindings. To do this introduce a class `MemoryLocation` which will approximate C++ memory locations. We then modify the method `getObject` (renamed to `getMemoryLocation`) to follow references, handle members and look through bindings. We also update the diagnostic message. The rest of `SequenceChecker` is not modified, except that we make it const-correct.
We currently do not handle bit-fields in any particular way, but ideally we should take into account that two distinct bit-fields can be in the same memory location. This is marked as TODO.