Fix issue 10874.

Don't assume that is(A : B) means a==b is valid, or that !is(A : B)
implies that a==b is invalid. Instead, test for a==b explicitly.

More specifically, int and ulong are ==-comparable, even though ulong is
not implicitly convertible to int. Thus, one should be able to convert
ulong to an int-based enum, but is(A : B) in the signature constraint
prohibits this. Testing for a==b explicitly, OTOH, makes this work.
Add unittest for issue 6893.
Allow narrowing conversions of enum -> integral (int, short, etc.).

It will just throw at runtime if the value of the enum is too large.
Add unittest for narrowing enum -> integral conversions.
Mark std.string.stripRight as @safe and pure
Mark std.string.strip and its unittests as @safe and pure
Mark std.string.chompPrefix and its unittests as @safe and pure
Merge pull request #1509 from tom-tan/safe-pure-string-strip

Mark std.string.strip and its unittests as @safe and pure
Merge pull request #1508 from tom-tan/safe-pure-string-stripRight

Mark std.string.stripRight as @safe and pure
Merge pull request #1510 from tom-tan/safe-pure-string-chompPrefix

Mark std.string.chompPrefix and its unittests as @safe and pure
Merge pull request #1504 from quickfur/bug6893

Issue 6893 - Write of enum member represented with ubyte or ulong
Merge pull request #1505 from quickfur/issue10874

Issue 10874 - conv.to ulong to int enum conversion