Checks which child is getting interviewed #3168
Updated c_dob_through_participant method to display default text when c_dob is not set. #3414
Refactored c_dob_through_participant. Extract the possible conditions into a new method. Added specs. #3414
Make OperationalImporterPscSync#{import, reset} require a whodunnit.

OperationalImporterPscSync is used in different responsibility contexts,
so there's no appropriate default.  (In the merge code, it's the user
who submitted the candidate data; in the import tasks, it's run as a
general "import" user.)  Under this assumption, there's two
possibilities:

1) Keep the arity of #import and #reset, but raise an error if a
   responsible user is not set.
2) Change the arity of #import and #reset, which raises responsibility
   assignment to a syntax-level requirement.  (Sort of.  A check for a
   non-nil responsible user might also be useful.)

I chose #2.
Update merge and import for new OperationalImporterPscSync interface.
Strip trailing spaces.
enable multiple response sets on Instrument #3034
Ensure all psu_code columns are integers. Closes #3655.

Three tables had the column data type converted. The fourth was
dropped because it isn't used.
Add null check on last_contact.contact_date. Fixes #3645.
A simple caching mechanism for NcsCodes. #3633.

Very, very simple. Just a fancy hash.
Add tests for existing finders. Done with #3633.
Implement finders in NcsCode using cache. #3633.

Fortunately it seems like the bulk of non-attribute access to NcsCodes
in the application comes through these finder methods.
Prevent modification of cached lists and instances. #3633.
Use NcsCode.for_list_name_and_local_code instead of where. #3633.

`NcsCode.for_list_name_and_local_code` is now backed by the cache, so
its preferable to `where` for finding one code.
Move CodeListCache to Mdes module. #3633.

Rationale: it's as much MDES-related as CodeListLoader or
NcsCodedAttribute, both of which are in the Mdes module.
Promote NcsCodedAttribute to top level. #3633.

It will shortly have much more to do.
Implement readers and writers. #3633.

This replicates most of the basic functionality of a belongs_to backed
by the code list cache. It also has the beginnings of extra behavior
on the setter (i.e., you can set the setter with a code value instead
of an NcsCode and have it do the right thing.)
Remove never-used .with_codes scope. #3633.
Restore automatic -4 values for blank codes. #3633.
Remove belongs_to examples for coded attributes. #3633.

This is a good example of why specs should describe behavior, not
configuration.