Xml logfile output

This implements an XML logfile output whenever data is logged. This file is completely self-contained, human readable, and importable by any XML parser. The advantages are discussed in #111, but to sum up here this improves archival qualities, since old versions of GCS will not be necessary in order to decode the binary stream. This is especially important if the logfile was generated with a branch that is no longer available, like a private branch with changed UAVOs.

As per a conversation several months ago with @solidgoldbomb, this file does not replace the binary stream but sits side by side. It reuses the original path and filename and adds ".xml" to the end.

Example logfile output:
```
      <packet Timestamp="2841">
         <uavobject UAVObjID="0x33DAD5E6" Name="AttitudeActual">
            <q1 units="" value="0.9215695261955261"/>
            <q2 units="" value="-0.039907306432724"/>
            <q3 units="" value="-0.04318291321396828"/>
            <q4 units="" value="0.3837347030639648"/>
            <Roll units="degrees" value="-6.132287979125977"/>
            <Pitch units="degrees" value="-2.806580066680908"/>
            <Yaw units="degrees" value="45.36333084106445"/>
         </uavobject>
      </packet>
      <packet Timestamp="2850">
         <uavobject UAVObjID="0x04228AF6" Name="Gyros">
            <x units="deg/s" value="0.4228535592556"/>
            <y units="deg/s" value="0.3875441551208496"/>
            <z units="deg/s" value="-0.3781118094921112"/>
            <temperature units="deg C" value="20"/>
         </uavobject>
      </packet>
      <packet Timestamp="2866">
         <uavobject UAVObjID="0xAA472714" Name="AttitudeSettings">
            <MagKp units="channel" value="0.05000000074505806"/>
            <MagKi units="channel" value="9.999999747378752e-05"/>
            <AccelKp units="channel" value="0.05000000074505806"/>
            <AccelKi units="channel" value="9.999999747378752e-05"/>
            <AccelTau units="" value="0.1000000014901161"/>
            <YawBiasRate units="channel" value="9.999999974752427e-07"/>
            <BoardRotation>
               <BoardRotation units="deg*100" value="0"/>
               <BoardRotation units="deg*100" value="0"/>
               <BoardRotation units="deg*100" value="0"/>
            </BoardRotation>
            <ZeroDuringArming units="channel" value="1"/>
            <BiasCorrectGyro units="channel" value="1"/>
            <FilterChoice units="channel" value="0"/>
            <TrimFlight units="channel" value="0"/>
         </uavobject>
      </packet>
```

Full output: https://gist.github.com/kubark42/46f8e7a85f19bbbdfe7b

Fixes 111.