ENH: Improve automatic pruning of unused deterministic nodes

Nodes need to know only those children that send non-zero messages. If a
deterministic node does not have any stochastic node below it, it will
send non-zero messages. Thus, do not add a deterministic node to the
parents' set of children until the deterministic node has stochastic
nodes below it. Also, if all stochastic nodes below a deterministic node
are removed, remove the deterministic node from the parents' set of
child nodes.

This has the effect that temporary deterministic conversion nodes are
removed automatically (or never even added to the model) and they won't
be haunting and there is no need to use delete() method.
ENH: Implement messaging methods for categorical Markov chain
DEMO: Add hidden Markov model demo

The demo uses categorical Markov chain for constructing a hidden Markov
model. The emission distribution is Gaussian and the results are
compared to basic Gaussian mixture model.
BUG: Fix proper time dimensionality in categorical Markov chain
ENH: Implement plates to Gaussian Markov chain and relevant unit tests
ENH: For GaussianARD, infer ndim from mu if parent mu is a node
ENH: Solve node plates in constructors

Mixture node needs the parent plates in the constructor, so all
exponential family nodes must compute and return plates in the
constructor.
TST: Add unit tests for Mixture node
BUG: Fix a few plate bugs in categorical Markov chain distribution
DEMO: Add a non-working sketch of a switching LSSM demo
BUG: Fix overflow/underflow bug in alpha-beta recursion

The transition probabilities were not scaled appropriately, causing
alpha and beta to drift to zero or infinity. Scaling them so that they
are basically valid transition probability matrices (each row sums to
one, or more accurately, D rows sum to D) fixes this problem that could
be seen when the length of the sequence was large.
ENH: Add shape_of_value method to distribution classes
ENH: Add plotting of categorical timeseries using Hinton diagrams
ENH: Ignore axes with length one when plotting
ENH: Add plot title in node's plot method
ENH: Use compute_fixed_moments when initializing from fixed value
ENH: Implement logsumexp
BUG: Fix bugs in logsumexp
TST: Add a few unit tests for logsumexp
ENH: Re-implement alpha-beta recursion and move to bayespy.utils.random

Now the alpha-beta recursion implementation is stable.