utils: Fix bugs in DataObject encoders

The DataObject is some weird / rarely used different code than the
normal TLV encoder/decoder.  It has apparently so far only been used
for decoding, without testing the encoding side, resulting in related
bugs.

Let's fix those that I encountered today, and add a test case.

Change-Id: I31370066f43c22fc3ce9e2b9ee75986a652f6fc4
diff --git a/pySim/utils.py b/pySim/utils.py
index 555aa82..8a7fcdb 100644
--- a/pySim/utils.py
+++ b/pySim/utils.py
@@ -1333,7 +1333,7 @@
             bytes encoded in TLV format.
         """
         val = self.to_bytes()
-        return bytes(self._compute_tag()) + bytes(len(val)) + val
+        return bertlv_encode_tag(self._compute_tag()) + bertlv_encode_len(len(val)) + val
 
     # 'codec' interface
     def decode(self, binary: bytes) -> Tuple[dict, bytes]:
@@ -1481,7 +1481,8 @@
 
     # 'codec' interface
     def encode(self, decoded) -> bytes:
-        obj = self.members_by_name(decoded[0])
+        obj = self.members_by_name[list(decoded)[0]]
+        obj.decoded = list(decoded.values())[0]
         return obj.to_tlv()