spec schema

Moves spec + validation in the direction of being a generalized schema, so validation is less hardcodey. This is based on seeing v2 move in this direction and if we're going to maintain validation for multiple versions it seems like we'll want this.

Corresponding changes on spec side:

https://github.com/mapbox/mapbox-gl-style-spec/compare/spec-schema

@tmcw bad idea or worst idea?

### Next actions

- [x] moral compass
- [x] Make v not one big recursive function
- [x] Fix up spec further to support this kind of validation
- [x] Better testing of the validator/schema itself
- [x] Restore `lib/reference.js` to do some ref cloning so it can resolve things like `-transition` without modifying the spec directly