Generalize the `ty::substs` struct so that it can represent multiple lifetime parameters

Small step towards #4846. r? @msullivan