@abstractmethod<EOL><INDENT>def save(self, subject):<DEDENT>
pass<EOL>
Persists the specified Subject's state for later access.  If there is
a no existing state persisted, this persists it if possible (i.e. a
create operation).  If there is existing state for the specified
Subject, this method updates the existing state to reflect the
current state (i.e. an update operation).

:param subject: the Subject instance for which its state will be
                created or updated
:returns: the Subject instance to use after persistence is complete
          - this can be the same as the method argument if the
            underlying implementation does not need to make any Subject
            changes