Sort out codegen target labels.

The codegen target itself (e.g., JavaThriftLibrary) has the
label 'codegen'.

The injected target (e.g., JavaLibrary) created at codegen time
has the label 'synthetic'.

Don't confuse the two.
Add a TODO around JVM group detection.
More sorting out of labels.

Language labels ('java', 'scala') don't belong on codegen
targets. They indicate a target that takes sources of that
type and emits classfiles. Whereas the codegen target takes
some other input (proto, thrift) and emits source files.