PatientSetQueryBuilderService: fix logical errors

Fixed logical errors in how patient set intersection and patient set
complement was calculated.

A patient belongs to a set iif there is at least one observation in
observation_fact that satisfies a certain condition.

For intersection, the code was selecting all the patients that had one
line in observation_fact that satisfied (cumulatively) the conditions in
the several panels. This is wrong and will in most cases give out an
empty set. For instance if one panel has an ontology term that maps to a
concept_path A and another has a term for concept_path B, and provided
that A is not a child of B and vice-versa, then there can be no line in
observation_fact whose concept satisfies both paths. The problem is that
we want to select the patients that have both an observation that
satisfies one condition AND another observation that satisfies another
condition, not select the patients with an observation that satisfies
both conditions. The fix was implemented by dividing each panel into one
query and using INTERSECT.

Panel inversion had a similar problem: it was selecting the patients
that had an observation that did not satisfy a certain condition instead
of selecting the patients that did not have an observation that
satisfied the condition. Therefore, if a patient had an observation that
did satisfy the condition and another observation that did not, he would
be wrongly selected. The fix was implemented by moving the inverted
panels to the end of the list and prepending the invert panels' queries
with EXCEPT. If all there is is one inverted panel, that it's the full
set of patients that is excepted.

For items in the same panel, which should be unioned together, the
problem does not exist. To select the patients that have an observation
that satisfies condition 1 or an observation that satisfies condition 2
is equivalent to selecting the patients with an observation that
satisfies condition 1 or condition 2.