code: def marshal_top(self, obj, cache=None):
          
          if not cache:
              cache = RollingCache()
  
          handler = self.handlers[obj]
  
          tag = handler.tag(obj)
          if tag:
              if len(tag) == 1:
                  self.marshal(TaggedValue(QUOTE, obj), False, cache)
              else:
                  self.marshal(obj, False, cache)
              self.flush()
          else:
              raise AssertionError("Handler must provide a non-nil tag: " + str(handler))
docs: Given a complete object that needs to be marshaled into Transit
          data, and optionally a cache, dispatch accordingly, and flush the data
          directly into the IO stream.