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