Consolidating forward range requirements

Because returning anything other than an *exact* type match messes everything up. This is particularly true in the sense that "saved" ranges are usually passed directly to a function, so not cast back to the original.
Make std.variant.maxSize public.

It's kind of hard to use VariantN without it.
Merge pull request #1008 from monarchdodra/save

Consolidating forward range requirements
Merge pull request #1113 from jmdavis/maxSize

Make std.variant.maxSize public.