Compass: save_offsets accepts compass instance
Compass: set_offsets modified to also save offsets
Compass: add learn_offsets_enabled accessor method
Compass: example sketch update for set_and_save_offsets
Copter: only save compass offsets when learning is on
Copter: PREFLIGHT_SET_SENSOR_OFFSETS used to set compass offsets

remove deprecated ardupilot specific SET_MAG_OFFSETS
Plane: rename compass set_and_save_offsets
Plane: PREFLIGHT_SET_SENSOR_OFFSETS used to set compass offsets

replaces ardupilot specific SET_MAG_OFFSETS message
Rover: rename compass set_and_save_offsets
Rover: PREFLIGHT_SET_SENSOR_OFFSETS used to set compass offsets

replaces ardupilot specific message SET_MAG_OFFSETS
Arming: use compass.configured method

This checks that when compass offset learning is off, that the offsets
are non-zero and that the detected device id matches the device id
stored to eeprom when the offsets were last saved.
Compass: sanity check instance in set_and_save_offsets
Compass: default device id to zero
Arming: accept non-const compass in constructor

The compass.configured() method checks the eeprom and cannot be const
meaning the Arming object requires a non-const reference to the compass.
Removed check for null compass because the compass object is always
created although this could lead to unnecessary pre-arn check failures
even though compass-use is set to false.
Plane: pass in compass to Arming constructor
AP_Compass: Corrected typo in parameter description

Corrected typo in parameter description
Plane: prepare for 3.0.4-beta3
Compass: Updated COMPASS_PRIMARY parameter description
Compass: update pixhawk expected device ids
Copter: rename control_hybrid to poshold