Rewrite, stealing functionality from paredit

This solution is more robust as it relies on paredit for parsing.

As well as the previous support for lists, strings and comments are now
supported. E.g. we can have (foo "bar |baz"), hit D and get (foo "bar |").

I also removed the code in the commands for C, D and Y which dealt with
visual-state.  The region is implied, so these commands don't make
sense, imo, when used with a visual selection.