Adds non-stacking implementation of Toaster

Cancels previous toast before showing new toast so that you don't build up a queue of toasts.

I added a new class to do this rather than modify the existing toaster; can do so if it's preferred as the saner behaviour given that toasts aren't attached to a particular screen (it could take a while to get through all messages, and by that time, the user might be on a completely different screen/app).