ENH: Implement rotation speed-ups for Gaussian arrays.

A new transformation/rotation class RotateGaussianArrayARD computes the
rotation for GaussianArrayARD nodes. These rotations can be used for
speeding up the inference of linear state-space models.
DEMO: Update PCA demo to use rotations.

PCA demo (demos/demo_pca.py) uses GaussianArrayARD which are now
rotated in order to speed up inference.
ENH: Implement plate rotation speed-up for Gaussian array node.

Rotation transformations can speed up the inference of linear
state-space models significantly. The rotation requires the rotation of
the state dynamics matrix which leads to also rotating the plate axes in
addition to the variable dimension axes. This plate rotation is now
implemented in GaussianArrayARD for performing the rotation and
RotateGaussianArrayARD for optimizing the rotation. Previous
implementation in RotateGaussianARD is deprecated because the new
implementation is more general.

See: Fast Variational Bayesian Linear State-Space Model (Luttinen, ECML
2013)
DEMO: PCA and LSSM demos use the improved rotation speed ups.
TST: Add a few tests for the plate rotation of Gaussian array nodes.
BUG: Fix the shape of scalar Gaussian array random samples

The shape of random samples from GaussianArrayARD were wrong in a
particular case. If GaussianArrayARD was used for scalars which had axes
variable dimensions (of length 1), they were incorrectly handled and the
result had too many unit axes.