Rework DOM measurement to try to prevent measurement errors

* Simplify scrollbar refresh and measurement by using imperative DOM
  manipulation instead of React to hide/show scrollbars.
* Rename `::performInitialMeasurement` to `::becameVisible`
* Break `::checkForVisibilityChange` out of `::pollDOM` and use it in
  to check for the element becoming visible in `componentWillUpdate`.
* Don't rely on stored visibility state anywhere. Always check again.
  This could potentially be cached for an update cycle but being wrong
  about this is disastrous so I'm being conservative.
Upgrade to language-ruby-on-rails@0.18
Check for visibility change when mounting instead of polling DOM
Don't use guard clauses in short measurement methods
Don't remeasure char widths until we've performed initial measurement
Merge pull request #3353 from atom/ns-fix-char-width-measurement

Rework DOM measurement to try to prevent measurement errors
Upgrade to incompatible-packages@0.9
Upgrade to git-diff@0.38.0 to add arrow for deletions.
Open file paths in focused window
Track AtomWindow from ipc open event

This ensures the window where the file is dropped is used to open
that file into even when that window does not have focus.
:lipstick:
:memo: Doc dev mode case
Use once for closed event
:memo: Move comment above isFile check
:memo: Doc file/folder path behavior in usage message
Open folder in current untitled window

Untitled windows will now have their project path set when a folder
is opened.
:memo: Doc other atom.open options
:memo: Clarify safeMode description
Rename topWindow to lastFocusedWindow