More msvc bugs

MSVC chokes on parameter-pack expansion in a couple contexts, so I pretty much just shook the code around until it stopped complaining. As far as I can tell the `Gens...` related changes have no semantic difference, they just entertain the compiler in slightly different ways.

The `SignedIntegral` change here I think is more legit. Previous code was negating an unsigned type (`size_t`). Probably would have underflowed.
Please add a comment here explaining why this is necessary. Linking to this issue is enough, if you want.