cpp: compat: Add C++98/boost std::owner_less fallback

The following implementations are supported:

- C++11 std::owner_less
- Boost boost::owner_less (newer Boost versions aligned with C++11)
- Our fallback reimplementation (older Boost versions)
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.
xsd-fu: Only use multi-index for references
Merge pull request #1482 from rleigh-dundee/cpp-model-reference-list

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