Some improvements over v2:
- You can access movementXY on pointer without needing to perform a manual `resetMovement()`
- Fixes bug where `releasePointerLock` would unregister event listeners before a final `pointerLockChange` could be called. Results in mouse.locked not having the right state and a final 'POINTER_LOCK_CHANGE_EVENT' not firing.