Add parser support for generalized where clauses

Implement support in the parser for generalized where clauses,
as well as the conversion of ast::WherePredicates to
ty::Predicate in `collect.rs`.
Add support for multiple region bounds in where clauses
auto merge of #20002 : jroesch/rust/generalized-where-clause-parser, r=nikomatsakis

Going to tentatively open a PR before I move on to other things tonight. I think everything should be good minus a failing test case for region bounds (gonna push that now, i.e 'a : 'b). r? @nikomatsakis 

Fixes #20023.