JS String Completion Fixes

I completely refactored all of this code, and fixed the quotes bug.

All string-based completions will now correctly handle double- and single- quotes, and will work whether the closing parentheses and quotes are present or not.