Use util.inherit + ES6 syntax
Remove Source's this.painter
Reduce coupling between source and map with events

Fire and listen for events rather than calling map.update()
directly. While here, fix issues with source.add event and
bubble style.change event through map.
Refactor GeoJSONSource updating

Use the #update interface established by Source. Map will
call this method when needed.