Fix for issue #297

All atomic elements in the libraries will now return 0 if you request
the density of a value outisde of its support
Merge pull request #4 from p2t2/DEV2.4.0

Merge pull request #295 from bruttenberg/DEV2.4.0
Merge branch 'DEV2.4.0' of https://github.com/bruttenberg/figaro.git into DEV2.4.0
Fixes the MakeList errors, I think issues #255 and #279. We just needed
to change the values stored in MakeList from a val to a def
Many changes to support particle BP, but backward compatibility is still
maintained. 

Major changes are:

1. Non-caching chains and -any- atomic element can now be used with any
factored algorithm. If an atomic element is encountered in the lazy
expansion that is not hardcoded into lazy values, it is automatically
sampled using some default number of samples. Changing the number of
samples is not fully supported yet, but will be at some point.
2. Equality of variables is now based on the id of the variable. That
is, two instances of a variable are the same if their id is the same. To
support this change, the id assigned to an element is -permanent-, so
that even if the variables are cleared from the cache, we retain the id
of the element until it is deactivated. 
3. BP will no longer automatically clear factors at the beginning of the
algorithm. This is needed because many other algorithms call BP which
may want to re-use factors. It is now the responsibility of the user or
other algorithm to clear factors.
4. Using lazy values requires the user to specify the number of samples
to take for atomic elements, but there are backward compatibility
versions so no changes are really necessary. 
5. There is now a function interface to chain called getUncached which
bypasses the chain cache. This is needed to get non-caching chains to
work in factored algorithms.
moved density estimation to factored to prevent compilation errors.
Removed GMM import
Merge pull request #300 from bruttenberg/DEV2.4.0

Dev2.4.0
Merge pull request #2 from p2t2/DEV2.4.0

Dev2.4.0