Behaviour for executing bootstrap steps. Allows tests to inject fakes.
@callback cmd(command :: String.t(), args :: [String.t()], keyword()) :: :ok | {:error, term()}
@callback mix(task :: String.t(), args :: [String.t()]) :: :ok | {:error, term()}