
  -spec demonitor(MonitorRef, OptionList) -> boolean()
                     when
                         MonitorRef :: reference(),
                         OptionList :: [Option],
                         Option :: flush | info.

  The returned value is true unless info is part of OptionList.

  demonitor(MonitorRef, []) is equivalent to demonitor(MonitorRef).

  Options:

  flush:
    Removes (one) {_, MonitorRef, _, _, _} message, if there is
    one, from the caller message queue after monitoring has been
    stopped.

    Calling demonitor(MonitorRef, [flush]) is equivalent to the
    following, but more efficient:

      demonitor(MonitorRef),
      receive
          {_, MonitorRef, _, _, _} ->
              true
      after 0 ->
              true
      end

  info:
    The returned value is one of the following:

    true:
      The monitor was found and removed. In this case, no 
      'DOWN' message corresponding to this monitor has been
      delivered and will not be delivered.

    false:
      The monitor was not found and could not be removed. This
      probably because someone already has placed a 'DOWN'
      message corresponding to this monitor in the caller
      message queue.

    If option info is combined with option flush, false is
    returned if a flush was needed, otherwise true.

  Note:
    More options can be added in a future release.

  Failures:

  badarg:
    If OptionList is not a list.

  badarg:
    If Option is an invalid option.

  badarg:
    The same failure as for demonitor/1.
