use funtion pointers for input port ops

This will let us have more than one type of input port, such as those on
"smart" sensor muxes.

Ref. ev3dev/ev3dev#80
fix listing and setting modes of analog sensors not working
Add support for HiTechnic NXT Sensor Multiplexer

This required some additional changes to the legoev3 bus drivers similar to the
nxt-analog changes that were made in preperation for this. General changes
include:

* Renamed sensor drivers to be the model name instead of the model number.
* LEGO sensor driver also now have "lego-" prefix.
* Ports can now have a parent other than legoev3-ports
* msensor address attribute is now decimal instead of hexidecimal
* Fixed issue with fw_version getting cut off
* Moved kernel messages for device registration and driver probe so that we get
  consitant messages.
* Added hook functions to nxt_i2c_sensor driver for handling special-case
  sensors.
* Fixed possible deadlock when removing I2C sensor.

Support for the HiTechnic NXT Sensor Multiplexer includes:

* Added I2C driver for the mux.
* New ht-smux-input-port driver for the ports on the mux.
* New ht-smux-i2c-host driver for communication with I2C sensors through the
  mux.
* New ht-smux-i2c-sensor driver for using I2C sensors that are connected to the
  mux.
* Uses the existing nxt-analog-host and nxt-analog-sensor drivers.

Ref. ev3dev/ev3dev#80