`model_to_dict`'s `extra_attrs` only applies to the top-level object in the case where `recurse=True`
Immediately after posting it I of course thought of the way a method or property lives on the class level, and how it might be difficult to reconcile to an instance's bound method. Hmm...
 I'm seeing the difficulty here. If you pass in the unbound method, there's no (apparent) way to match a bound instance method with said unbound class method. If there's no way you can figure out either, I'll probably close this one up.
 @coleifer Which means itsn't possible to get `extra_attrs` on recursive items? No, for such cases as that you're probably best off just writing your own serializer.
Might I suggest a couple of solutions:

1) Have `extra_attrs` actually take in the attributes as the list members -- so instead of:

```
model_to_dict(x, extra_attrs=['method_bar', 'property_foo']
```

You would see:

```
model_to_dict(x, extra_attrs=[ClassX.method_bar, ClassX.property_foo])
```

This interface is more familiar and consistent with the `exclude`, `only`, etc parameters of the same function.

Is there a particular reason why this one is purely string-based?
