rewrote event subscriber

- it's now variadic to support subscribing for multiple events simultaneously
- manual subscription moved to a separate class