Add special 7-bit encoding and decoding functions for USSD coding

Handling 7-bit coding is a little different for USSD, as TS 03.38
states:

To avoid the situation where the receiving entity confuses 7 binary
zero pad bits as the @ character, the carriage return or <CR>
character shall be used for padding in this situation [...].

If <CR> is intended to be the last character and the message
(including the wanted <CR>) ends on an octet boundary, then another
<CR> must be added together with a padding bit 0. The receiving entity
will perform the carriage return function twice, but this will not
result in misoperation as the definition of <CR> [...] is identical to
the definition of <CR><CR>.

The receiving entity shall remove the final <CR> character where the
message ends on an octet boundary with <CR> as the last character.

Jacob has verified the fix with fakeBTS and the wireshark dissector.

Fixes: OW#947
Reviewed-by: Jacob Erlbeck <jerlbeck@sysmocom.de>
diff --git a/tests/ussd/ussd_test.ok b/tests/ussd/ussd_test.ok
index 1b6316e..91f2a31 100644
--- a/tests/ussd/ussd_test.ok
+++ b/tests/ussd/ussd_test.ok
@@ -51,3 +51,24 @@
 Result for 0 is 7
 Result for 0 is 6
 Result for 1 is 5
+<CR> case test for 7 bit encode
+original = 30 31 32 33 34 35 36 37 
+encoded = b0 98 6c 46 ab d9 6e 
+decoded = 30 31 32 33 34 35 36 37 
+
+original = 30 31 32 33 34 35 36 
+encoded = b0 98 6c 46 ab d9 1a 
+decoded = 30 31 32 33 34 35 36 
+
+original = 30 31 32 33 34 35 36 37 0d 
+encoded = b0 98 6c 46 ab d9 6e 0d 
+decoded = 30 31 32 33 34 35 36 37 0d 
+
+original = 30 31 32 33 34 35 36 0d 
+encoded = b0 98 6c 46 ab d9 1a 0d 
+decoded = 30 31 32 33 34 35 36 0d 0d 
+
+original = 30 31 32 33 34 35 0d 
+encoded = b0 98 6c 46 ab 35 1a 
+decoded = 30 31 32 33 34 35 0d 
+