New structure to store job request.
Rework add_request utility.
Simplify request processing.
Fix more places for new request.
Refactor function names.
Continue to rework adding requests.
Start candidates sorting implementation.
Remove wrong assumption.

If there are packages from a remote repo that is different from a local
one, we still want to add it to the upgrade candidates list.
Fix candidates sorting.
Add delete request processing.
Modify solver to handle install candidates.
Fix compile errors.
Fix finding of variables in the chain.
Fix runtime issues.
Fix storage class for universe items when replace uuid.
Add a temporary workaround.
Merge branch 'request-rework'

So now we have the following logic:

* All requests contains so called `upgrade candidates`
* For each upgrade candidate we can find a suitable package from some
 repo
* We choose repo by the following rules
 - first try the same repo as local package
 - then search for the most recent version
 - then grab a package from the repo with the most priority
* When solving SAT we now add more flexible rules for requests including
 all upgrade candidates
* We now process request prior to other processing that allows to
 restore support for complex flags, such as `-R` and others

Known issues:

* UID replacement is bad and need to be updated (some existing issues
 are fixed however)
* The code is rather experimental and needs testing
* Need to implement assumptions switching in SAT solver