Add a take() method to TransactionalQueue (for #2600)

I added `take()` to `BaseQueue` rather than just `TransactionalQueue` because `take()` now exists in all sub-interfaces of `BaseQueue` (it was already in `IQueue`).