Add observations to graph.

Allow a graph to store observations to limit active trails and
  subsequent query calculations.
Add Query.

Using hashes for target and conditions.  This creates a natural
  conjunction between the key-value pairs and a natural
  disjunction if the value is an array.  E.g. {a: 1, b: 0}
  would mean where A is 1 AND B is 0 (conjuction).  Also, {grade: [:a, :b]}
  means where the grade is an A or a B (disjunction).
Fix attribute names.

Using shorter and more-consistent names:
  * label instead of name
  * parents instead of independents
  * label and values instead of dependent_label and dependent_values
This should alleviate a little confusion.