Add the original first

The only change is to the map: I'm using Ctrl-; like the C-style
statement terminator.

Source:
http://stackoverflow.com/a/6080996/79125
Add tests of original functionality

Test with a few types of braces.

All tests pass.
Use solution from reddit that adds quote support

Instead of just braces, it closes quotes. This is trickier because they
are unmatched, so we need to do some magic to guess what's the right
thing.

Breaks some brace tests.

Source:
http://www.reddit.com/r/vim/comments/2lnwqy/map_to_close_current_quote_bracket_or_paren/
Add tests for how it should work

Some tests fail. Not sure what needs to change to make this work.

After closing quotes, it will keep adding quotes and not find the
preceding parens.

For some reason closing include strings fails. Possibly a different kind
of string syntax attribute.
Refactor synIDattr into is_string
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.
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.
Add travis.yml to start automated testing
Add Plug and README

Make plugin easier for other people to use.

It appears that the <expr> nature of the map only needs to be defined
with the Plug. Otherwise, we're actually returning the plug when we map
it.