xsd-fu: Use multi-index for C++ reference lists

boost::multi_index_container is used to index elements by both
index number (insertion order) and value (pointer location).
This allows access by index and fast lookup without the need
for an O(n) list traversal.

This is similar to the Java ReferenceList but does not implement
a container in its own right; it's just a specialisation of an
existing multi-indexing container implementation as a typedef.
The code generator has been updated to emit the new container
types in place of std::vector, and the C++ code templates
adjusted to use them for fast lookups.