Add a type parameter for 'empty' and 'never'

As per #80. 

~~Adding type parameters breaks the source compatibility. Hold off until we prepare to release 0.24.0.~~