The C++, Python and Rust APIs can now declare a named type in a type
library without defining it, and list the types a library declares.
Previously Python's `NamedTypeReferenceType.target` and Rust's
`NamedTypeReference::target` looked up a reference only by its type id. A
reference to a declared type has no type under its id, so they now fall
back to the reference's name, matching core. Python gains
`BinaryView.get_type_by_ref` to do this.
Python's cycle detection when following references recorded the type
object rather than its id, and never recorded the starting id. A cycle
recursed until Python raised `RecursionError`. It now raises `TypeError`.