Make Event generic Event<T>

add generic type for better static type checking during dev.