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.