Mark std.string.isNumeric as @safe and pure

It doesn't contain unsafe and impure operations.
It cannot be marked as `nothrow` because it uses `std.string.toLower` which may throw exceptions.