Add a macro to generate Rule[I, O] for T <: O

As `Rule[I, O]` is invariant in `O`, macro-generated `Rule[I, T]` for `T
<: O` cannot be
casted to `Rule[I, O]`. This patch provides an additional macro,
`genForSubtype[I, T <: O, O]`, which generates a `Rule[I, O]`, but uses the
constructor of `T`. The `gen` macro has been rewired to call
genForSubtype[I, O, O].

The new macro also provides explicit argument types to the companion
object's `apply` method. This helps to select the correct method
unambigously, in case it's overloaded.