Convert Locker to be instantiated.

As an instance, the Locker object is able to own the collection.
Calling code can then pass around the Locker without receiving code
being knowledgeable of the underlying mongo collection.

Static methods in PHP are essentially just namespaced global methods -
there is very little different between Locker::readLock() and
Locker\readLock().  These methods are more difficult to use: they can't
be passed around easily, they require the shared parameters ($collection
in this case) to be kept and available for passing everywhere the method
needs to be called, and are more frustrating to mock in tests if they
can be mocked at all.
sorry I should have been clearer, I think it made sense to allow negative for the timestamp, but not for a duration, thus the difference with the way pollDuration was.