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
* [ ] 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
* [ ] write good docs into Config class
* [ ] convert a package to use schema
* [ ] make sure settings view works
* [ ] maybe remove deprecated calls from settings view
`parseInt` called with a string can return `Infinity`.

Also you can't write out Infinity to a `.json` file, so it would seem weird to be able to set `Infinity` without being able to save it like that to disk.