code: def decode(self, node, cache=None, as_map_key=False):
          
          if not cache:
              cache = RollingCache()
          return self._decode(node, cache, as_map_key)
docs: Given a node of data (any supported decodeable obj - string, dict,
          list), return the decoded object.  Optionally set the current decode
          cache [None].  If None, a new RollingCache is instantiated and used.
          You may also hit to the decoder that this node is to be treated as a
          map key [False].  This is used internally.