Support JSON Schema in Config 

JSON Schema ([schema core](http://json-schema.org/latest/json-schema-core.html), and the [supported keys](http://json-schema.org/latest/json-schema-validation.html))

It will look like this:

```coffee
@config:
  fontSize:
    type: 'integer'
    default: 16
  lineHeight:
    type: 'number'
    default: 1.3
  someArray:
    type: 'array'
    default: ['ok', 'yeah']
    items:
      type: 'string'
  invisibles:
    type: 'object'
    properties:
      eol:
        type: 'string'
        default: '\u00ac'
      space:
        type: 'string'
        default: '\u00b7'
```

### Notes

* If a value is passed to `::set` cannot be coerced, it will not be set (eg. passing `'omg'` to an integer type)

### TODO

* [x] support some of the fancy bits of the schema (minimum, maximum, enum)
* [x] deprecate the `getInt` style methods
* [x] use in our internal classes
* [x] read schema from loaded packages
* [x] figure out a reasonable notification when there are issues loading user's config
* [x] deprecate `configDefaults`
* [x] write a doc about it I can point to
* [x] write good docs into Config class
* [x] Move config schemas out of workspace and editor
* [x] convert a package to use schema in a PR https://github.com/atom/git-diff/pull/40
* [x] make sure settings view works
Further thoughts, I think onDidChange events should have `oldValue` and `newValue` as keys. Observe should only give you the latest value. This is consistent with our event subscriptions elsewhere.