Generalize the `ty::substs` struct so that it can represent
multiple lifetime parameters, and not just one. Also add an option
for erasing lifetimes, which makes trans code somewhat simpler
and cleaner.
Check for comparisons to NaN in patterns

For every pattern that refers to a static value, evaluate it and emit a warning
if it is a NaN.

Fixes #6804
Generalize NaN pattern detection using walk_pat
auto merge of #8027 : nikomatsakis/rust/issue-4846-multiple-lifetime-parameters-1, r=pcwalton

Small step towards #4846. r? @msullivan
NaN patterns: indicate that is_NaN is a method
auto merge of #8029 : emillon/rust/issue-6804, r=cmr

Hi,

As noted in #6804, a pattern that contains `NaN` will never match because `NaN != NaN`. This adds a warning for such a case. The first commit handles the basic case and the second one generalizes it to more complex patterns using `walk_pat`.