cleanup
introduce the concept of an aggregate type

This is a type which is aggregated from multiple primtive/simple
elements. In libfirm such a type cannot be represented as a mode.
improve/fix funccall opt

- fix: not just aggregate parameters need special handling but also
  aggregate return types.
- don't just look at the called function but also on the call type.