Greatly simplify cache expiring process

This should fix all bugs in the cache expiration process, although this
needs further tests to be run.
Lots of optimizations and structural changes

This moves the .deb file processing into one step, which allows getting
rid of the crazy helper variables in ComponentData. We also store an
ignore-reason now and dump some basic data on why something was ignored
- this will be very helpful for debugging in future.
This code also adds some speed optimizations and adjusts the coding
style at several places.