Rewriting the MulticastDelegate because Xcode won't stop complaining about it's different retain/release semantics. It now uses structs and pointers instead of ObjC classes.