Design and implement a simple in-memory publish-subscribe system that supports the following features: - Multiple topics: Publishers can publish messages to named topics - Multiple subscribers: Subscribers can subscribe to one or more topics - Message delivery: When a message is published to a topic, all subscribers to that topic should receive it - Unsubscribe capability: Subscribers should be able to unsubscribe from topics - Wildcard subscriptions (bonus): Support pattern matching like "user.*" to subscribe to "user.created", "user.deleted", etc.