first draft for MDNotImplementedError

Here is a trivial implementation of a special NotImplementedError for multiple dispatch that allows for increasingly more general functions to be used.  It's pretty janky as is but I thought I'd ask for input sooner rather than later.  Here is a basic test

```Python
    f = Dispatcher('f')

    @f.register(object)
    def _(x):
        return 'default'
    
    @f.register(int)
    def _(x):
        if x % 2 == 0:
            return 'even'
        else:
            raise MDNotImplementedError()
    
    assert f('hello') == 'default' # default behavior
    assert f(2) == 'even'          # specialized behavior
    assert f(3) == 'default'       # fall bac to default behavior
```

Some particular questions 

* Better name than `MDNotImplementedError`?
* Intuitive example to put in the docs?
* How do we feel about copying the code for `dispatch` into `dispatch_iter`?  We definitely want to keep the old interface.

cc @eriknw @encukou @quasiben