* fix: Release lock only when stream has ended reading or an error occurs
* refactor: Refactor code and tests
* refactor: Move function mock to onBefore and remove unnecessary data drain
* fix: Make functions protected, add extra listener and add extra tests
* fix: Add extra TSDoc comment
* fix: Adjust tests to expect both end and close event
* refactor: Move test to other file
* refactor: make lockedRun method-independent
* fix: ensure lock release happens only once
* fix: make locked resources time out
* fix: destroy readable on error
Co-authored-by: Ruben Verborgh <ruben@verborgh.org>