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.
@mizuchi3 What do you mean by 'enhance'? Was there an entropy-based view implemented in pv that I missed?
The one I implemented simply computes the information of a view based on the number of visible pixels per element. It uses the existing picking code as a basis for that. The algorithm hence doesn't know anything about semantics, and only depends on the geometry under the current projection.

@biasmv Thanks for the hint, I'll try that as soon as I can.