Rework auth checks for gccgo.

gccgo has problems comparing concrete types and interfaces. I'm betting it is actually only interfaces implemented by non-pointer types, but hey, I'm not a compiler writer.\

Reworks the auth checks.
A slightly less intrusive fix might be this:

    // TODO remove the names.Tag conversion when gccgo
    // implements concrete-type-to-interface comparison correctly.
    if names.Tag(names.NewUnitTag(unit)) == tag {

assuming it works, of course.