device: added a _device_id to all drivers

this device ID identifies a specific device via the tuple of (bus, bus
type, address, devtype). This allows device specific configuration
data to be stored along with a device ID, so the code can know when
the user has changed device configuration (such as removing an
external compass), and either invalidate the device configuration or
force the user to re-calibrate
drv_mag: added devtypes for magnetometers
hmc5883: setup device type
lsm303d: setup device type
device: pass CDev::ioctl() to superclass

this allows DEVIOCGDEVICEID to work.
device: use bitfields to keep DeviceStructure small

this keeps it small enough to fit in a float, which makes it possible
to see the full value in a MAVLink tlog

Conflicts:
	mavlink/include/mavlink/v1.0
mpu6000: fixed internal/external mixup in pointers

Thanks to Emile for spotting this!

Conflicts:
	mavlink/include/mavlink/v1.0
hmc5883: periodically check the config and range registers

this copes with I2C comms errors causing the range or config registers
to become corrupted, leading to bad reading. This is easily
reproducible with a 1.3m I2C cable in the same run of cable as a GPS
UART cable. The error happens every half hour or so.

Conflicts:
	mavlink/include/mavlink/v1.0
	src/drivers/hmc5883/hmc5883.cpp