Making ControllerInfo::hardware_interface a set

This replaces all instances of ControllerInfo::hardware_interface
with std::set<std::string> hardware_interfaces instead.  This
allows one to properly represent multi-controllers which use
different types of interfaces.  getHardwareInterfaceType is
also converted to getHardwareInterfaceTypes.  A legacy version
of getHardwareInterfaceType is added which calls the other and
returns a random interface.  A warning is displayed if there is more
than one interface available. The ControllerState message is also
affected.