Update to the latest three.js

I need to do some more involved object manipulation in three.js to handle
multiple bond orders. (It currently just draws every bond as if it was a single
bond.)

While investigating how to do this, I noticed some differences between the
three.js documentation and the code I was using so to avoid the confusion I'm
updating to the latest.

(Which requires an updated TrackballControls as well - from
https://github.com/mrdoob/three.js/tree/master/examples/js/controls)
Include bond order in the bond data

In preparation for drawing the bonds according to their bond order (1, 2 or 3).
It currently draws every bond as if they're a single bond.

MolReader reads it from the MOL format (it's the 3rd value on each of the bond
lines), and this gets passed to the BondDto object to go to the client.
Model bonds correctly based on their bond order

Much of this code is inspired by
https://github.com/patrickfuller/blender-chemicals/blob/master/molecule_to_blender.py

Using some 3D vector maths, the steps are wroughly...

1. Create a bond object (THREE.Object3D) for the bond containing the appropriate
number of parallel tubes (based on the border). This is of the required length
to fit between the atoms and located with its centre at the origin and pointing
along the x-axis

2. Translate the object so that its centre is at the centre point between the
two atoms

3. Rotate the object so that its pointing along the axis between the atoms

Note that the threejs vector operations tend to modify a vector object (e.g.,
normalize modifies a vector into its unit vector), which is why I've introduced
the vector helper methods to work with them in a more immutable way.