Add an API for decorations; render stuff in the gutter again

A decoration is an object attached to a buffer row. Here's a decoration:

```js
{type: 'gutter', class: 'my-sweet-class'}
```

And here is how to attach it to a buffer row:

```coffee
editor.addDecorationToBufferRow(1, {type: 'gutter', class: 'my-sweet-class'})
```

Currently the only thing that renders a decoration is the `GutterComponent` and it only cares about decorations with `type: 'gutter'`. It will add the decoration's `class` property as a class to the proper line-number node in the gutter. 

The neat thing is that the `GutterComponent` handles all the bs with updating as line number nodes are added and removed. So no more watching the `display-updated` event and manually updating classes in packages like `git-diff` and `bookmarks`.

### Markers

There is a marker API as well. Packages like `bookmarks` should not be watching the markers and updating their decorations manually. 

```coffee
marker = editor.displayBuffer.markBufferRange([[2, 13], [3, 15]], class: 'my-marker', invalidate: 'inside')
decoration = {type: 'gutter', class: 'marker-class'}
editor.addDecorationToMarker(marker, decoration)
```

The class `marker-class` will properly track the marker's rows on the gutter.

### Options

Sometimes you might want a decoration to show on wrapped lines (git-diff), and sometimes you dont (bookmarks), so there is an option: `softWrap`. Like so: `{type: 'gutter', class: 'marker-class', softWrap: true}`. If you have ideas on how better to pass options, let me know.

### Removing decorations

Currently you can only remove them on each buffer row. Like finding markers, it will remove any decoration that matches the pattern.

```coffee
editor.addDecorationToBufferRow(1, {type: 'gutter', class: 'my-sweet-class', namespace: 'cats'})
editor.addDecorationToBufferRow(1, {type: 'gutter', class: 'my-other-class', namespace: 'cats'})

# this will remove the previous two
editor.removeDecorationFromBufferRow(1, {namespace: 'cats'})

# usually you'll probably just have one class and do this
editor.removeDecorationFromBufferRow(1, {type: 'gutter', class: 'my-other-class'})
```

The api works the same for marker decorations. 

### TODO

* [x] Deprecate the old gutter methods
* [x] Figure out where to put this api. @nathansobo on the `ReactEditorView`? Now its on `Editor`.
* [x] Maybe pull the folds out to be decorations??
* [x] Docs
* [ ] Tests for `cursor-line` decoration
* [ ] Add a `cursor-line-no-selection` decoration
* [ ] Tests for 'typeless' decorations
Fixes #1984
I dislike this right now. It's not really possible to batch decorations the way things are written right now. The `DisplayBuffer` would best be able to tell when it needs to batch something, but the editor is not available in there. 

The worst offender is when attaching to markers, specifically the cursor markers. Moving away from `setImmediate` makes medium to largish selections really slow. Huge blocks will have decorations removed and added. If I could batch in the displayBuffer, this might be ok. But without the ability, there is a render call for each removal / addition.