Remove a tag from this object.  Removing a tag involves a round-trip
        to the EC2 service.

        :type key: str
        :param key: The key or name of the tag being stored.

        :type value: str
        :param value: An optional value that can be stored with the tag.
                      If a value is provided, it must match the value
                      currently stored in EC2.  If not, the tag will not
                      be removed.  If a value of None is provided, all
                      tags with the specified name will be deleted.
                      NOTE: There is an important distinction between
                      a value of '' and a value of None.

def remove_tag(self, key, value=None):
        """
        Remove a tag from this object.  Removing a tag involves a round-trip
        to the EC2 service.

        :type key: str
        :param key: The key or name of the tag being stored.

        :type value: str
        :param value: An optional value that can be stored with the tag.
                      If a value is provided, it must match the value
                      currently stored in EC2.  If not, the tag will not
                      be removed.  If a value of None is provided, all
                      tags with the specified name will be deleted.
                      NOTE: There is an important distinction between
                      a value of '' and a value of None.
        """
        if value:
            tags = {key : value}
        else:
            tags = [key]
        status = self.connection.delete_tags([self.id], tags)
        if key in self.tags:
            del self.tags[key]