tidier computeVertexNormals on BufferGeometry 

This is a suggestion for a slightly tidier version of `BufferGeometry.computeVertexNormals()`. Main points:

1. Remove 140 line `if` statement with a short check for `position` attribute at the start of the method
2. Adds missing `normal` attribute using `addAttribute()` with a true `THREE.BufferAttribute` in lieu of a manual attribute addition.
3. Checks for attributes using `getAttribute()` rather than manually checking the attributes property.

I haven't altered the actual computation at all, purely a cosmetic change - unfortunately the diff looks awful due to the if statement shift :(
Could be, if we change the about above to
```js
if ( normalAttr === undefined ) {
    // add a normal attribute
    normalAttr = new THREE.BufferAttribute( new Float32Array( nVertexElements ), 3 );
    this.addAttribute( 'normal', normalAttr );
}...
```
was just being a little cautious as this assumes that
```js
var bar...  // some THREE.BufferAttribute
this.addAttribute( 'foo', bar )
this.getAttribute( 'foo' ) === bar
``` 
Clearly this is the case now, but wasn't sure if you are guaranteeing going forwards that the setter wouldn't fill a larger master buffer for performance or something crazy. Want me to change it to this approach?