Formalise the pushing of failed sources

Background

As highlighted in this MR !1741 (closed) a current bst build execution will not push sources (by default) if the build queue failed. This behaviour is achieved by the ordering of the source push queue being after the build queue, but there's no explicit conditional in the source push logic that stops failed build sources being pushed. Adding in logic to enforce the behaviour brings up questions about how we handle sources, especially what the default behaviour should be during a build, and how a future source push command would operate with the given build status of sources. For instance, if a buildstep failed due to a temporary issue (say OOM, or network issues) it's probably wrong to presume that we shouldn't be pushing the source. There's the plausibility of pushing source as soon as it's cached locally instead of waiting for a build to complete as the operations can somewhat be independent, unlike pushing built artifacts.

Edited by Tom Pollard