renderer: allow acquiring/releasing frames on-demand
This is particularly designed for hardware decoding and such, as well as interop with e.g. lavfi vulkan. In either case, we don't want to permanently consider frames mapped for the entire duration that they may stick around in e.g. pl_queue, but rather dynamically acquire/release them immediately surrounding the actual usage site.
This implementation is also designed to guarantee that only one frame will ever be acquired at a time, which allows us to support some hwdecs without requiring multiple mappers.
Fixes #194 (closed)