Enforcing invariant on Type members

  - every binding occurs only once

  - mutliple bindings get concatenated into intersection types.
Merge branch 'variadic' into develop