Add conflicts_with constraint

conflicts_with constraint covers the scenario when a node can be
assigned to a certain role only if it is not assigned to any of the
listed roles.

E.g.: A node can be either a pacemaker-cluster-member OR
a pacemaker-cluster-founder, but not both. This would be archieved by
adding these constraints to the model:

{
  "pacemaker-cluster-founder" => {
    "conflicts_with" => ["pacemaker-cluster-member"],
  },
  "pacemaker-cluster-member" => {
    "conflicts_with" => ["pacemaker-cluster-founder"],
  }
}

The conflicts_with value can contain more than one role in the case of
multiple conflicting roles:

{
  "roleA" => { "conflicts_with" => ["roleB", "roleC"] }
}
Add conflicts_with constraint type to ServiceObject

conflicts_with constraint allows specifying one or more mutually
exclusive roles for a given node and role.

E.g.: a node can be either a pacemaker-cluster-member or
pacemaker-cluster-founder, but not both.

The patch also adds tests for existing constraint types.
Merge pull request #992 from bkutil/conflicts_with_constraint

Add conflicts_with constraint