Mask unwanted bits in the result of ~.

GCC optimizes away ~*gpio used as a condition, possibly because
apparently the ~ operator ignores the operand type unlike other
operators.  It seems the operand is always cast to signed in and the
result is a signed int.  This was causing a very tricky bug to occur
that could only be seen in the resulting assembly.  If *gpio was
marked volatile, it would still only compile to "ld <reg>, gpio" with
optimisation.
Add missing uint64_t cast, improve avr code.

This fixes a bug where the left shift loop was only int-sized, i.e.
16-bit on avr, potnetially causing bad things to happen.  It also
generated terribly inefficient avr code where the result of the loop was
then sign-extended, and'd and or'd byte by byte, etc.  Now avrgcc uses
__lshrdi3 which is more space-efficient and possibly more cpu-efficient,
although still quite subotimal.  Eventually we should get rid of all
64-bit operations.
Message fragmentation/reassembly support (Base).
Replicate RH's recvfromAck blocking behavior.

The FragmentedDatagram class temporarily relies on this behavior so
we've got to implement it too.
Bump payload size up to 80 bytes (arbitrary).
Message api for zero-copy receiving.

getWriteBuffer() can be used on a freshly created empty Message object
to obtain a buffer into which the caller can write data as it's being
received.  This lets us avoid using a second buffer on stack in the
Base, and then having to memcpy.