ci: improve docker image layering
At the moment we are building 3 independent images, each one having a different Rust version. This works perfectly fine but we can save storage space and bandwith by making a smarter use of Docker's layering system.
Introducing a new 'base' image containing all the deps, including GStreamer, acting as a base for the actual images. As a result most of the actual content is now shared accross the same Docker layer. This would save us from downloading/building all the deps when updating images and will reduce storage and transfers for runners.