Refactor ServiceWatcher

Make thread safe and lock free and fixes a variety of minor bugs. Most
of location code is under the synchronization strategy of 'throw
everything behind one massive lock'. This is a bad idea for a variety
of reasons and makes it very difficult to reason about thread safety.
Correcting this will make code easier to read and understand.

Test: Tested manually on device.

Change-Id: I42ad9b4009eabc04227008d6d562dca557087d1f
6 files changed