alfred: Use well defined structs to create packets

The current packets sent over the network or over the unix socket were only
defined in the code but not by any struct. This makes it hard to find the right
place in the code to change when working with the struct. It is also makes it
easy to accidently use the wrong position when reading or writing from/to the
buffer.

Structs are introduced to define the fixed entries of a packet. The struct also
defines the position of the dynamic part followed by it using zero-length
arrays.

Signed-off-by: Sven Eckelmann <sven@open-mesh.com>
alfred: Add transaction management block to push_data

The transactions over the network should be secured using transactions based on
the packet count and transaction id. As first step each alfred_push_data packet
has to transport the current identifier of the transaction and the sequence
number of the current packet.

Signed-off-by: Sven Eckelmann <sven@open-mesh.com>
alfred: Add transaction id to request packets

The request sent by a slave has to start a transaction. Otherwise it is not
possible to distinct for him the incoming data without an extra handshaking
protocol. The request packets get an extra field to store the requested
transaction identifier.

Signed-off-by: Sven Eckelmann <sven@open-mesh.com>