service: Solve locking issues inside GATT interface

ObserverList class handles adding/removing elements during iteration
by itself, therefore we don't need to do any locking.
Additionally, change lock type to shared for better performance, and
to avoid possible deadlocks that might be caused by calling HAL from
observers.

Change-Id: I4c372f1e03bd27a96bc6c036ab8ce34f5501c0a7
6 files changed