Greatly simplify block storage and dispatch

No need for a separate class, locking, ID assignment, or a dictionary. Just the userInfo argument.