[RDY] api: window_set_cursor doesn't always update position.

When setting cursor position using api, visible range is only updated (if needed) if window is the current one. To reproduce,
open nvim with two (+100 lines ) files.
```
NEOVIM_LISTEN_ADDRESS=/tmp/neovim nvim -o file1 file2
```

And in a Python shell run
```
# to setup
v = neovim.connect("/tmp/neovim")
w1, w2 = v.windows
v.current.window = w1
w1.cursor = [1,0]
v.current.window = w2

# and then
w1.cursor = [100,0]
```
the last line will not cause the upper window to scroll, so line 100 remains invisible.

This seems to be the simplest fix. Not that I really like the curwin change workaround, but it was already used for set_height below (and a lot of vim's windowing/drawing code seems to assume the current window...)

Similar issue: `buf.options['ft'] = 'python'` doesn't work for non-current buffer `buf`, `&ft` does change but no changes in syntax highlighting etc are triggered.
@bfredl  I think @tarruda may have done this intentionally because there may be code paths that only operate on `curwin` because they aren't (yet) parameterized on `win`. I assume this is why things like `:windo` have to actually change the current window in order to do useful things. Obviously we want to move away from this limitation eventually.

Could you break off this commit into a separate PR so I can merge the other two commits in this PR?