Centralize list of supported versions. Done with #3616.
Implement comparison for Mdes::Version. Closes #3545.

Comparison is a simple lexicographic sort on the version number. This
will be sufficient up to MDES 10.0.

Done with #3616.
Implement version #matches? for operator+other version. #3616.

This will be used to interpret the version-specific code list
assignments outlined in the ticket.
Enable per-MDES code lists for attributes. #3616.
Add versioned code lists to reflect MDES 2.1 changes. #3616, #2090.
Self-register MdesRecord models. #3616.

Also includes a code list association spec which exercises this
functionality and assumes #3743.
Specs for existing NcsCode.attribute_lookup behavior. #3616.
Make NcsCode.attribute_lookup dynamic. #3616.

In addition to making this method MDES version aware, this change also
intercepts and requires clarification when an attribute maps to
different list names in different models.
Pass along disambiguation options from callers of attribute_lookup. #3616.

`ncs_code_lookup` is a much more commonly used method in the
application than `attribute_lookup` itself. Disambiguating will need
to be done from both methods.