ENH: Add categorical random sampling function to bayespy.utils.random
TST: Add tests for categorical random sampling function
ENH: Finalize Distribution class framework. Add ensureparents decorator

Now that the implementation uses Distribution objects to perform the
computations for exponential family nodes, several wrappers and dummy
nodes can be removed. For instance, GaussianArrayARD is no longer a
function, which calls a function to construct a class which is used to
create an object, but it is a class which can be used directly to
construct objects.

One key part of this change is the use of
_construct_distribution_and_statistics method, which constructs
distribution, statistics and parents' statistics objects, and the
deduces the dimensionalities of the natural parameters. Using this
approach, Mixture objects can be created easily by giving a Node class
(exponential family node) as an argument.

Also, ensureparents decorator was created which can be used to decorate
__init__ method of Node classes. It makes sure that the arguments of the
__init__ method are proper nodes of the correct message type. Thus,
initialization is simpler as one does not worry about possible numerical
constant arrays or nodes that have not yet been converted to proper
type. However, the decorator can only be used when
_parents_statistics does not depend on the parent nodes.
DEMO: Update Gaussian mixture demo for the recent changes