def delete_key(self, key_name, headers=None,
                   version_id=None, mfa_token=None, callback=None):
        """
        Deletes a key from the bucket.  If a version_id is provided,
        only that version of the key will be deleted.
        
        :type key_name: string
        :param key_name: The key name to delete

        :type version_id: string
        :param version_id: The version ID (optional)
        
        :type mfa_token: tuple or list of strings
        :param mfa_token: A tuple or list consisting of the serial number
                          from the MFA device and the current value of
                          the six-digit token associated with the device.
                          This value is required anytime you are
                          deleting versioned objects from a bucket
                          that has the MFADelete option on the bucket.
        """
        provider = self.connection.provider
        if version_id:
            query_args = 'versionId=%s' % version_id
        else:
            query_args = None
        if mfa_token:
            if not headers:
                headers = {}
            headers[provider.mfa_header] = ' '.join(mfa_token)
        def key_deleted(response):
            body = response.read()
            if response.status != 204:
                raise provider.storage_response_error(response.status,
                                                      response.reason, body)
            if callable(callback):
                callback(True)
        self.connection.make_request('DELETE', self.name, key_name,
                                     headers=headers,
                                     query_args=query_args, callback=key_deleted)