Preql

NOT ready to merge.
If we switch to named tuples, or 

    expected = mutual_info.mean
    actual = entropy1.mean + entropy2.mean - entropy_joint.mean
    err = sum(term.variance for term in [
        mutual_info, entropy1, entropy2, entropy_joint,
    ])
    assert_less_equal(abs(actual - expected), 2.25 * err)