Refactor shell build tree tests
These tests were quite hard to follow what they were testing, and did not cover the error cases thoroughly either. Instead, use some test parametrization to implement more succinct tests which cover the API surface more thoroughly.
Due to parametrization and discrete testing of various use cases, this was going to be very expensive, so this patch introduces some pytest module scope fixtures.
This allows multiple discrete tests to be run against a prebuilt ArtifactShare with specific artifacts already built and available in the share, so that this discrete testing is quite optimized.
Edited by Tristan Van Berkom