The version inmemory is optimized, while the boltdb implementation is
not.
It returns a list of the same package but with all the versions present
in the db.
Unmarshalling needs well-defined structs, also swap pointers in few places where needed.
There are few more TODOS pending (like getting UpdatePackage fixed properly)
Split dependency resolving ( definition <-> db mapping ) into a method of the tree (ResolveDeps),
and do not care of looking up for packages while parsing.
Note: it is slower but it is much accurate and we can
choose what to do with the ones which aren't resolved (and show a helpful message too).