lib: correctly set altitude unit without erasing neighbouring data

The way the altitude unit was set in buffer was erasing 4 unrelated
bits with 0. This made the altitude precision wrong.
lib: introduce proper fixed point parsing and representation module

This additional modules isolates the complexity of parsing and
representing fixed point numbers. This is uses for coordinates in
LLDP-MED.

The previous version was using an incorrect precision. When parsing
user input, the precision is now derivated from the number of digits
provided. When displaying a value, the precision is used to add
additional 0 if needed.

Moreover, the previous version was a bit buggy with some values and
with negative numbers. This change contains unittest to tackle most
issues.

It relies on presence of __builtin_clzll() function, available in GCC
and others. Maybe this will become a portability issue.

This closes #41.