Use the major mode's syntax table directly.

So far, we assumed that [] () {} are always the delimiters, and the only
delimiters, we want to highlight. But this is not true. For example, in
Pascal, {} are comment delimiters, and in C++, <> serve as brackets
in template syntax. The respective major modes get this right, we don't,
so rely on them. Code simplification is an added benefit.

Note: currently it's probably buggy and certainly incomplete. For example,
it doesn't respect rainbow-delimiters-highlight-TYPE-p yet.
Restore the ability to disable the highlighting of selected delimiters.

Please note that the new way is not compatible with the old way.
Simplify two ifs by using max in their stead.
Remove an unneeded condition.

`re-search-forward` will not let us go beyond `end` anyway.
Kill rainbow-delimiters--parse-partial-sexp-cache when turning off.

Instead of setting rainbow-delimiters--parse-partial-sexp-cache to nil
when turning on, kill the local binding when turning off. This allows
the GC to collect the old value immediately after the mode is turned off,
instead of when the buffer is killed or the mode is turned on again.
Add a test suite.
Use `syntax-ppss` instead of our own implementation.

The reason we had our own implementation was to avoid
`syntax-begin-function`, which may break the assumption we rely on that
`syntax-ppss` is exactly equivalent to `parse-partial-sexp` from
`point-min`.

Instead of rolling our own, use the standard one, with
`syntax-begin-function` set to nil.
Move rainbow-delimiters--mode-turn-{on,off} back into rainbow-delimiters-mode.

They're not necessary anymore, as neither function is registered in a hook.