Assert irreducible keys

This branch adds an assertion to Keys.new that will raise an exception if the keys are not irreducible, that is they can be further decomposed into a key containing a subset of the attributes.