Support for broadcoms multifunctional devices

bnc#841170, fate#316090

and cleanup and so on.
this looks wrong as you reset card["driver"]

in general I prefer to have initial hash and then modify it if needed like
```
one = {
  "name" => DeviceName(card),
  "type"   => controller,
  ...
}
one["name"] = DistinguishedName(one["name"], card) if Arch.s390
...
```