Version combiner now deals with strict and range versions

Which means that the version conflict resolution system now knows how to
handle incompatibilities in the following basic scenarios:

  >>> combine('forbiddenfruit (>= 0.1.2)', 'forbiddenfruit (< 2.0)')
  'forbiddenfruit (>= 0.1.2, < 2.0)'

  >>> combine('forbiddenfruit (>= 0.1.2)', 'forbiddenfruit (0.1.5)')
  'forbiddenfruit (== 0.1.5)'

  >>> combine('forbiddenfruit (<= 0.1.2)', 'forbiddenfruit (< 2.0)')
  Kaboom!

  >>> combine('forbiddenfruit (0.1.2)', 'forbiddenfruit (0.1.5)')
  Kaboom!
Simplify combine_requirements() so it will match with what is currently tested
Add tests for the approach that probably wont work in the version combiner
Maestro#should_queue() is now aware of version constraints in the requirement parameter
Fix lib.version_combine to avoid breaking when we have only one requirement
Mark packages and parents as failed when Dependencer fails

Curdling was hanging if one or more dependencies of a given package
couldn't be installed. Basically, the package that requested that broken
dependency was never marked as failed. Closes #15.