PiOS CAN: add ability send arbitrary messages

This approach is somewhat hacky, but allows
sending and fetching messages.
PiOS CAN: support sending custom messages

This still requires defining the messages at the level
of the driver. However it provides a fairly clean API
and should extend easily when only a few messages are
used.
PiOS CAN: register queue to receive messages

Create a queue that will receive messages for the
known message IDs. Also makes the receive handler
push data on those queues.
PiOS CAN: clean up support for multiple IRQ

Current code hardcodes CAN1 everywhere. This abstracts
that to a single place.
PiOS CAN: only define methods for FreeRTOS

Since the method returns a xQueueHandle, it only makes
sense to use with FreeRTOS. The bootloader does not
have this and crashes.
PiOS CAN: use pios_queue
PIOS CAN: update definitions to use PIOS_Queue
PiOS CAN: use packed message structures

Make sure things are robust to compiler details.
PiOS F4: add PIOS_CAN support

This adds PIOS_CAN to the F4 targets with an implementation
matching the F3 one.
PiOS Brushless: add ability to lock the motor

When locked, they move to the nearest 120 deg phase, which
will provide the maximum torque.
CameraStab: send PIOS_CAN_GIMBAL message on update

This passes to the gimbal the desired attitude (to integer
angles) and the attitude of the flight controller. This
will allow more efficiently controlling the attitude with
POI mode or relaying the setpoint from the transmitter.
UAVORelay: hacky send and receive custom messages
UAVORelay: receive CAN messages for gimbal
Targets: UAVORelay only useful for SparkyBGC

Make it always on for this board
UAVORelay: rename to GimbalControl

This code was only serving one purpose, so this makes it
more explicitly.
BrushlessGimbalSettings: increase max default rate

Having a rate limit by default just causes it to slip
at high rotation rates. Not needed.
Sparky/SparkyBGC: change CAN rate for F4 compatibility

To make sure that F3 and F4 boards can communicate the
prescalars are set to the APB1 rate of the board divided
by 2. This makes the baud rate independent of clock speed.
Brushless: lock gimbal for extreme angles

Whenever the frame is heavily tilted the gimbal will
lock in the current position. Similarly if the setpoint
is too low, it will lock.
BrushlessGimbal: max angle setting to limit movement

Setting BrushlessGimbalSettings.MaxAngle will limit how
far the gimbal tries to move.
GCS/SparkyBGC: create custom configuration widget

This just exposes the important settings for the brushless
gimbal:
 - stabilization kp
 - power for each axis
 - damping term

The other settings can be accessed through the more specific
pages but this covers the main ones.