'Create a milestone for this repository.
:param str title: (required), title of the milestone
:param str state: (optional), state of the milestone, accepted
values: (\'open\', \'closed\'), default: \'open\'
:param str description: (optional), description of the milestone
:param str due_on: (optional), ISO 8601 formatted due date
:returns: :class:`Milestone <github3.issues.milestone.Milestone>` if
successful, otherwise None'

@requires_auth
def create_milestone(self, title, state=None, description=None, due_on=None):

    url = self._build_url(u'milestones', base_url=self._api)
    if (state not in (u'open', u'closed')):
        state = None
    data = {u'title': title, u'state': state, u'description': description, u'due_on': due_on}
    self._remove_none(data)
    json = None
    if data:
        json = self._json(self._post(url, data=data), 201)
    return self._instance_or_null(Milestone, json)
