loci: begin removing inheritance unions

Reviewer: @wilmo119 

Inheritance unions are one of the nastier parts of LOCI. They're the reason you need use use `obj.header` and (for example) `obj.output` when iterating over TLV lists. Internally, they require a bunch of special case code to handle the name collisions with the normal per-class typedefs. They're also completely useless since every member of the union has the same type.

This pull request modifies the LOCI API in a backwards-compatible way. Anywhere you'd previously pass a pointer to an inheritance union, now you can pass a pointer to of_object_t instead. Once all callers have been converted over to the new API I will remove inheritance unions from LOCI.