Allow LSE to remove acquire/release operations

If we are synchronizing on a removable singleton, we can guarantee that
no other thread has access to it. We can remove MonitorOperations
related to that singleton since they are redundant. In a similar
vein, Volatile load/stores related to removable singletons can
be treated as regular load/stores.

Bug: 227283233
Test: art/test/testrunner/testrunner.py --host --64 --optimizing -b
Change-Id: Ia049ff7749ce341bdd05e0ade57221b44a8d298f
4 files changed