Pass entire matrix to InvalidMatrixStateException

This allows us to inspect status of all jobs
Memoize required_jobs

Each job's allow_failure? value should not change during the build,
so might as well memoize this.