support for hierarchical module naming schemes

@geimer: this should fix the problem that's blocking you right now

I might need to figure out one more thing w.r.t. the devel module name before this really works for you, I'm looking into that...
replace with less copy/paste code
```
tc_elems = set([elem for elems in tc_elems.values() for elem in elems])
if exclude_toolchain:
    tc_elems=filter(lambda x: not x == tc.name,tc_elems)
```

i don't really like the fact that a function retuns 2 different types based on a function argument. should be 2 functions imho