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.