Add option to set a custom view for notifications.

This is just a preview PR to get some preliminary feedback before I submit this upstream. @djsell, could you take a look?

---

This changeset enables the creation of custom layouts for notifications. I had to make a few things public that weren't before, namely the option defaults system and some parts of `CRToastView`, but hopefully the extra functionality is worth this cost.
The problem is you can't access the allocated view object, and since it'll be reallocated every time `notificationView` is called there's not really a sensible way to do so. I could change things to alloc once then use a persistent view object tracked by another ivar, but I don't want to make too many conceptual changes at once so I'll stick with a simple class/alloc every time approach for now and we can worry about extending it further in the future if needed.