Add OS X proxy icon to title bar

Fixes #1891.

Test Plan:

  * Opened Atom window in directory, verified directory icon shows up
  * Opened a file and verified icon changed
  * Right clicked icon, verified menu appears
  * Drag file to terminal and it pastes the file path (yay)
  * Opened a new Atom window and opened some files in that to make sure that
    it didn't change the original window

I didn't add any specs for this - advice welcome here. I also haven't tested
on Windows or Linux but it looks like `setRepresentedFilename` is a noop on
those platforms.
path -> proxyIconPath

Test plan:
Crossed fingers
Implement setDocumentEdited too

As requested by @philipgiuliani

Test Plan:
Opened an existing file and made a modification. The icon fades at the same
time the tab close button changes to a circle. Undo makes the icon opaque
again.
Don't use project path as fallback icon for item with no path

Stops the project folder icon appearing in places that don't make sense
like settings and new files.

Test Plan:

  * Opened settings and didn't see the project folder icon
  * Closed all tabs and saw the project folder icon
Handle invisibles at the token level to fix char width measurement

Fixes #3188
Render correct classes on leading/trailing whitespace spans
Assign invisibles via config in editor-view-spec
Add specs for firstNonWhitespaceIndex and firstTrailingWhitespaceIndex
Preserve hasLeading/TrailingWhitespace when copying lines w/ invisibles

This fixes the styling of the leading whitespace of folded lines
Determine the endOfLineInvisibles for each TokenizedLine
Render end-of-line invisibles based on state of TokenizedLine
Remove handling of invisibles from EditorComponent
Make Editor::moveCursorToFirstCharacterOfLine work with invisible chars
Run animation frame after toggling invisibles in EditorComponent spec
Use config defaults to assign default invisible characters
Assign default invisible character glyphs via config defaults

This commit also extends config.get to merge default values into the
returned object if both the assigned and default values are objects.
This allows 'atom.invisibles' to be treated as an object that always has
the default values filled in.
Don't assign defaults to array config values
Deprecate EditorComponent::setInvisibles with grim
Don't show invisibles in mini editors

This moves observation of the config keys to Editor, which assigns the
invisibles hash or null on the TokenizedBuffer via the DisplayBuffer to
control whether we render invisibles or not.
Merge pull request #3206 from atom/ns-invisibles-in-tokens

Handle invisibles at the token level to fix char width measurement