Fleshing out an infrastructure to better search objects

Added a find() method on a few obj dicts taking as input a textual form.
Using these methods to implement or improve dependency tracking between
objects.
Reading the depends on from yaml on a pair of index and fkeys too.
Objects diff infrastructure moved to base class.

BIG refactoring!

Dropped diff_map methods from the ObjectDict classes, asking each object
to generate its own SQL. This is done in dependency order, so objects may
decide to do something on their own based on shared information: this is
exploited to create the shell type on the first function defined on a type
and to disable the function body check at the first function.

Because dropping the object is also moved to a separate method on the
object we can now drop the objects in reverse order of dependency.

Refactor is still missing from the classes I'm not using in my test db,
marked as TODO.