Package genx is a convenience package to better support the code
generator. It can be depended on by the user facing beam package
and be refered to by generated code.
Similarly, it can depend on beam internals and access the canonical
method list in the graph package, or other packages to filter out
types that aren't necessary for registration (like context.Context).
RegisterDoFn is a convenience function for registering DoFns.
Differs from RegisterFunction and RegisterType by introspecting
all parameters and returns of Lifecycle methods on the dofn,
and registers those types for you.