Return a list of boolean values corresponding to whether or not each
        key in keys is marked done.  This method can be faster than
        individually checking each key, depending on how many keys you
        want to check.

        :param keys: a list of json-serializable keys

def are_done(self, keys):
        '''
        Return a list of boolean values corresponding to whether or not each
        key in keys is marked done.  This method can be faster than
        individually checking each key, depending on how many keys you
        want to check.

        :param keys: a list of json-serializable keys
        '''
        # No keys are done b/c the file does not even exist yet.
        if not os.path.exists(self.path):
            return [False] * len(keys)

        done_lines = set([self._done_line(key) for key in keys])
        undone_lines = set([self._undone_line(key) for key in keys])
        status = {}
        with open(self.path) as fh:
            for line in fh:
                if line in done_lines:
                    # extract serialized key
                    status[line[5:-1]] = True
                elif line in undone_lines:
                    status[line[5:-1]] = False
        serialized_keys = [self._serialize(key) for key in keys]
        return [status.get(sk, False) for sk in serialized_keys]