isForwardRange now takes an optional element type.

isForwardRange now has an optional 2nd template parameter that defaults
to void. If not void, it only evaluates to true if the range's element
type is the same type as this extra argument, modulo const. For
instance, `isForwardRange!(int[], const(int))` is true, but
`isForwardRange!(int[], string)` is false.