Effeciency is my middle name. But I can't spell it.

getTrueCount(truelist, falselist) is now getBooleanCount(family, bool).
It compares the given list, and counts the data sets where the familys
data matches the given value, rather than checking both lists. I don't
think we ever need to be able to count where some nodes are true, and
some are false, but if we do, I can change it back easily.

TL;DR - It only counts all trues or all falses, not both at once. If you
need it to check both, ask and I can have it done in a jiffy.

I'm actually linking the nodes together now, rather than just storing
string values of parents.

I use a HashMap to store the Nodes in, since searching is really nice
that way. Also, you may notice that data is stored as a list of arrays.
This is slightly more efficient, but I also just want to play around
with them. If you hate them as much as I did a year ago, I'll change it
back in 2 minutes or less.

Nodes now store their index.

Added super cool logging function. Change a methods DEBUG var to print
more/less:
log(ERROR, "message") // always prints
log(INFO, "message") // general output, such as "xyz done"
log(DEBUG, "message") // only prints when you're confused

And finally, reader should be working. It isn't giving errors.