Moved some of the static methods in BasicSolver to ConstraintSolver

Rewrote ConstraintSolver.validateDefinitions() method to correctly
handle dependencies.

Previously, validateDefinitions was forcibly checking that every
constraint property have a definition at every level of the hierarchy.
This change ensures that only the appropriate dependencies are checked.
Added invalid_definitions sample files

TODO: I believe this is a negative test case. It should ideally be
      wrapped in a JUnit test case so as to check for exceptions.