WebGL core improvements

This PR includes a number of data structures, clean-ups and improvements developed while working on the WebGL vector data renderer. It does not touch any vector code itself.

The bullet points are:

 * a new data structure, `ol.structs.IntegerSet` for representing sets of integers as an packed array of ranges
 * a new data structure `ol.structs.Buffer` for representing arrays of numbers with in-buffer memory management and the ability for multiple users to independently track which elements have been updated
 * WebGL buffer management and optimized GPU uploads using `ol.structs.Buffer`
 * the ability for `ol.Rectangle` to represent empty rectangles
 * empty `ol.Extent`s and a new `ol.Extent.prototype.extendXY` function that allows an extent to be extended without creating a new temporary object
 * promotion of common WebGL layer functionality (intermediate framebuffer, texture, and common matrices) into the `ol.renderer.webgl.Layer` base class
 * miscellaneous clean-ups

I'd very much appreciate a fairly swift review of this code, as the WebGL vector research that I'm doing depends on this code, and it's much easier to base the work on `master` than on a separate branch.