compiler: Normalize specific procedure union types

It's not possible to perform runtime tests to distinguish procedure
types from each other. This means that a procedure type union would not
be resolvable by our generated code. Instead collapse unions containing
multiple specific procedure types in to the procedure top type.