Adding support for viewpoint entropy

This adds a function to compute the [viewpoint-entropy](https://www.cs.ubc.ca/~heidrich/Papers/VMV.01.pdf) of a view after applying a rotation. The viewpoint-entropy is a measure for the amount of information shown by a view, based on the number of visible pixels for each object. High viewpoint-entropies result in more information shown.
A typical use case of this function is to sample a number of camera positions, evaluate the entropy, and chose a view that has maximum entropy.

In addition, a view based on the principal components of all CA atoms is computed in demo.js using [numeric.js](numericjs.com). While views created by the viewpoint-entropy depend on the current style, principal components only depend on atom coordinates and thus will always result in the same view for a given protein.
You could write this as:

```javascript
obj.structure().eachResidue(function(residue) {
  var centralAtom = residue.centralAtom();
  if (centralAtom === null) {
    return;
  } 
  var pos = centralAtom.pos();
  X.push([pos[0], pos[1], pos[2]]);
});
```

Central atom returns the carbon alpha atom for amino acids and the C3' for nucleotides. This makes sure your code is able to handle DNA/RNA properly