zink: rework pipeline cache implementation
this is now a screen-based queue which can be triggered to serialize cache updates, ensuring synchronization
the cache is on the program object, enabling incremental updates as well as variant loading for an entire pipeline collection at once