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
Applying Buffer Geometry Custom Attributes to WebGLRenderer2
Merge @zz85/buffer_attributes into dev