[RFC] diff: Send the text of the comparison through stdin.

Slight performance increase of `:diff[update|split]` in using `os_system()` to send the contents of the buffer. Here's my benchmark:
```vim
function! s:diff()
  edit nvim/diff.c 
  vert diffsplit nvim/eval.c " Test for two completely different files.
  new | only
  edit nvim/diff.c
  vert diffsplit nvim/diff.master " Two similar files.
endfunction

command! Do call s:diff()
```
And the results zooming in on the `diffsplit` lines:
```
branch  total (s)   self (s)  type
mastr   0.460142   0.210851    completely different
job     0.431205   0.216067
sys-out 0.429822   0.203984
this    0.408696   0.199957

mastr   0.279197   0.114843   similar
job     0.213775   0.062578
sys-out 0.222114   0.073695
this    0.215443   0.068872
```
|name | branch | link |
---------|---------|------
|mastr | master | N/A|
|this | this branch | N/A|
|job     | Using a job instead of os_system | https://github.com/splinterofchaos/neovim/tree/diff-job-in|
|sys-out | using os_system instead of redir | https://github.com/splinterofchaos/neovim/tree/diff-sys-out|
so not the most exciting results in the world. Note: I found I got the biggest performance increase when I had CPU-intensive processes running in the background. I attempted various things such as running the `diff` program as a job, using a read callback, and using `os_system()` to get the output instead of using redirection, but I actually found these made it slower. (In case anyone's curious to test it, here's my branch for running `diff` in a job: https://github.com/splinterofchaos/neovim/tree/diff-job-in)
Why the special treatment of `cmp_len`?  It's not mentioned in the docstring.