Separate matched vs unmatched pairs

Reduce the duplication of the pair characters by separating the two
types into dicts that we can join into text classes.

paren tests still fail and TODO quote tests still fail.
Add support for angle brackets
Make quote completion optional

Add endoscope_handle_quotes to flip back to original (stackoverflow)
implementation. That version handles parens better, but doesn't handle
quotes at all.

When handle_quotes == 0, all parens tests pass.
When handle_quotes == 1, no new tests are broken.
Prevent incorrect detection of strings

We don't want to detect quote completion after we just inserted the
closing quote. Prevent string closing if the previous character is a
quote.

This will prevent closing an empty string, but that seems like an
uninteresting use case.

Fixes two test cases. One of the fixed cases still fails in vader, but
the usage works in vim.
Code simplification: use fewer one-off functions

join_and_escape is a better abstraction, so openers and closers aren't
needed.
Handle cpp include strings

cpp include strings don't have "string" in their name, so they weren't
counted. Add include to the regex so they'll be handled. This may also
let other types of includes slip through, but since those may be strings
as well, that's fine.

I can't think of many includes that use braces, so hopefully this
doesn't break anything.
fixup! Add tests for how it should work

Fix test case
Use workaround to make vader behave like vim

I will revert these changes when junegunn/vader.vim#37 and
junegunn/vader.vim#38 are fixed, but until then at least these tests are
passing (and testing something).

I'm not sure why the workaround fixes my case for 37, but not my
reported synthetic case.