Fix path handling on windows and osx/linux

I added `expand-file-name` to handle paths with tilde, relative paths, etc. Ran fine on osx but when I tested on windows I ran into two problems:

- `shell-quote-argument` doesn’t work right with `start-process-shell-command` on windows for some reason. I think it has to do with emacs using cmdproxy.exe as the shell on windows, because the string it was outputting ran fine when pasted into cmd.exe.
- `expand-file-name` converts backslashes to forward slashes in path names and `start-process-shell-command` expects backslashes on windows

So I changed it to use `start-process` instead and now it works on windows and osx and handles paths with tilde and spaces properly. This doesn’t let you redirect output like before, so if `omnisharp-debug` is `nil` it adds a process filter that discards the output from the process, otherwise when outputting debugging info, it uses the standard filter that prints all output to the process buffer. I also added a process sentinel that prints an error message if the server process exits abnormally because I was having trouble figuring out how to configure it initially when the server process was failing silently.
checking for a tail (cdr) is one operation, checking length takes linear time in the size of the list