[Highcharts-3D] Improved algorithm to select visible faces when drawing cuboids

The current code compares 2 vertexes' X or Y positions to decide if each face is visible or not. This simple approach works fine for small rotations, but causes glitches on larger angles.

The new approach calculates each face's area to verify if it is front-facing (negative area, CCW vertexes) or back-facing (positive area, CW vertexes) and returns only the front-facing paths.

Reproduction: http://jsfiddle.net/hxmw8y9s/2/
This diff makes major changes to the implementation of the `perspective()` function:
- Fix perspective formula to be Rectilinear. Otherwise we get funny misalignment artifacts -- Notice that the vertical grid lines in http://jsfiddle.net/r3y93qpe/ don't end in the expected place
- Rotate around `ze=depth/2`. Otherwise, the chart is off-center when rotated -- See http://jsfiddle.net/07LL525c/
- Exports the perspective function as Highcharts.perspective, so it can be used by plugins.
- Uses isometric mode (No perspective projection) when `viewDistance==0`
- Most importantly, Projection parameters (alpha, beta, origin) are now calculated inside of perspective() function, instead of in every call origin.
  - Simpler code at call place
  - Avoids inconsistent calculations at each origin -- In particular when using `inverted=true` and `axis.reversed=true` -- E.g., http://jsfiddle.net/m8ppj1mx/
  - caller must specify if the element is being drawn inside the plot area or not, so that we can compensate the SVG transform.

This change doesn't affect Renderer.arc3d(), pie charts and donut charts.