tlv: Fix length returned by t{l16,16l}v_put

Every other function returns a pointer to the first byte after the tlv
that was just written.

tl16v seems to be a copy and paste error from tlv16 above and t16lv seems
to count the 16-bit tag twice.

The new tests verify that the return value of *_put(buf, tag, len, val)
points to buf + *_GROSS_LEN(len).

Change-Id: I268a7e11fb5dce67ce1bd7974ab86c4d2bd002f7
diff --git a/include/osmocom/gsm/tlv.h b/include/osmocom/gsm/tlv.h
index dc61de1..7e6dfb5 100644
--- a/include/osmocom/gsm/tlv.h
+++ b/include/osmocom/gsm/tlv.h
@@ -148,7 +148,7 @@
 	*buf++ = len >> 8;
 	*buf++ = len & 0xff;
 	memcpy(buf, val, len);
-	return buf + len*2;
+	return buf + len;
 }
 
 /*! put (append) a TL16 field. */
@@ -168,7 +168,7 @@
 	*buf++ = tag & 0xff;
 	*buf++ = len;
 	memcpy(buf, val, len);
-	return buf + len + 2;
+	return buf + len;
 }
 
 /*! put (append) a TvLV field */