Add more word boundary unit tests.

Clean up the implementation.

Rejigger the parser so that the `u` flag can be disabled for UTF-8-only
regexes. The key insight is that we shouldn't necessarily reject disabling of
the `u` flag, but instead reject anything that might result in matching a at a
non-UTF-8 sequence boundary. For example, ASCII character classes are UTF-8
compatible, and empty width assertions never impact the location of a match.
An example of a regex that would be disallowed is `(?-u)\xFF`, since `\xFF` is
not valid UTF-8.

Then... we're done and people can choose correct & slow word boundaries, or
partially correct & fast word boundaries. Bah.
