Fix proposal for unsoundness issue #13 + test case

This patch addresses the unsoundness issue #13. The idea is to first collect the UB constraints and then add them together with the Phi node predicates. If no Phi nodes exist, add the UB constraints directly as instruction conditions. The recursive parsing at each Phi node can be improved, but we should discuss the proposed solution first.
I'm not sure if block predicates should be reused in phis of the same block. Consider the following:

```
%0 = block
%1:i1 = phi %0, 1:i1, 0:i1
%2:i8 = phi %0, 1:i8, 0:i8
%3:i1 = eq 0:i8, %2
%4:i1 = and %1, %3
cand %4 0:i1
```
Block ```%0``` would be associated with one predicate ```P1``` created in ```%1```. If we reuse it in ```%2```, the solver can make only the following selections

```%1 = 1, %2 = 1```
```%1 = 0, %2 = 0```

resulting in a wrong optimization.