Build +inherit into Struct, change IFO discovery logic
I changed the new +inherit mechanism to operate from Struct and to make it available in sub-fields of the toplevel IFO. This is in preparation for IFO structs to inherit a "Materials" field.
To change the loading logic, the ifo.yaml discovery mechanism had to be modified. ifo.yaml files now have to specify the module and class that they would like to load. load_budget then uses those as defaults in loading the module in class. They can be overridden as well.
I need people who have relied on load_module to load non-standard Budgets to test this (and add the tests into the tests/ folder!). I think it should largely preserve the interfaces, but I don't know all of the ways people have used the interfaces.