Another pkg universe rework.

Universe is now organized in the following way:

* it is a hash table based on origins hash
* each item in this table is itself a linked list (*next pointer)
* items in a linked list means the same origin packages but with
  different checksums, that means that a package has been upgraded
  and therefore needs to be reinstalled/updated.

Solver has been modified accordingly:

Solver vars are now in two hash tables:
1) hash table by origin;
2) hash table by digest;

Origin hash is organized in the similar way: linked chains of
packages with the same origin. Digest hash is just a set of all
variables.

When adding a chain of variables which are related to the same
origin perform the following operations:

1) for all dependencies find the corresponding variable in the
variables *origins* hash:
* if a variable for a dependency is not found, register new one,
but include all packages in the chain;
* add a dependency from not a single package but from the whole chain:
(!A | B1 | B2 | B3 ...)

2) for all conflicts find the corresponding variable in the variables
origins hash:
* if there is no variable registered then register a new chain;
* add a set of conflicts to all variables in the chain:
(!A | !B1) & (!A | !B2) ...

3) for the inital hain itself register the explicit conflicts with
each other (as we cannot have packages with the same origins installed):
(!A1 | !A2) & (!A1 | !A3) & (!A2 | A3)