Support custom BufferGeometry attributes in WebGLRenderer.

- fixes #3017 and possibly #3084
Adding custom BufferGeometry attributes support to WebGLRenderer2.
Proper attributeSize declaration in WebGLRenderers
Supporting updates with BufferGeometry as discussed in #3088

Use

geometry.attributes.index.needsUpdate
geometry.attributes.position.needsUpdate
geometry.attributes.normal.needsUpdate
geometry.attributes.uv.needsUpdate
geometry.attributes.color.needsUpdate
geometry.attributes.custom.needsUpdate

instead of for usual geometries

geometry.verticesNeedUpdate
geometry.elementsNeedUpdate
geometry.uvsNeedUpdate
geometry.normalsNeedUpdate
geometry.colorsNeedUpdate
geometry.tangentsNeedUpdate
Add BufferGeometry + Custom Attributes + Particles example.

This seems to get 15fps faster than the non BufferGeometry counterpart.
Note that buffergeometry.dynamic = true is required for updates
Also cleaned up WebGLRenderer
More refactoring with BufferGeometry in WebGLRender to reduce code.

Its tempting to go on, but would stop here to make sure there's no regression.
Also, will have to port these changes over to WebGLRenderer2
Refactoring addObject WebGLRenderer to make code cleaner
Prevent BufferGeometry custom attributes's array from being deleted by setting geometry.attributes.name.dynamic = true
Fix the renderList sort function to be truly stable

Multiple objects can have the same id. Using that id to compare the render
objects makes the sort function unstable. Use the webgl object's index in the
render list instead. That number is guaranteed to be unique.

This fixes #2966.
Fixed breakage in FlyControls.
Cleaned up .compose() and .decompose()
Merge branch 'dev-cleanup' of https://github.com/WestLangley/three.js into dev
Starting to combine GeometryExporter in SceneExporter2.
Merge remote-tracking branch 'rmx/issue-2966-stable-sort-not-stable' into dev
WebGLRenderer: ids need to be sorted in reverse.
Updated builds.
Merge remote-tracking branch 'origin/dev' into dev
Applying Buffer Geometry Custom Attributes to WebGLRenderer2
Added new ring geometry.
format from 3 to 3.1;