Refactor ToastsList to use slice pattern
Right now the ToastsList component has logic scattered around in multiple places. We can refactor it to use the slice pattern and clean up a lot of boilerplate.
Fixes #33690 - Unify toast notification logic in one component
Instead of having the actions and reducers separate from the actual
component, this refactor leverages the slice pattern to unify all of the
logic and remove a lot of boilerplate.