Add Missouri Hub profile

- Add MissouriMapper and related tests
- Add lib/textnode.py
- Add `spectype' module with list of valid types.

Notes:
- Subject strings are split on semicolons in
  MissouriMapper.map_subject().  Splitting is done with the `shred'
  pipeline module in some other profiles.
- MissouriMapper overrides the title mapping performed in
  OAIMODSMapper.
  See https://issues.dp.la/issues/7617#note-19, item 4.
  OAIModsMapper was designed to treat various attributes not relevant
  to Missouri and appears designed to take the last title element it
  encounters.
- Titles and descriptions are assigned as lists.
- As with OAIMODSMapper's treatment of spatial data, we filter out
  hierarchicalGeographic properties that are not in the allowed list.
  We do, however, allow `continent', unlike in OAIMODSMapper.
Do I read this correctly, then, that I should filter our `continent` from the `spatial` properties, and copy it to `spatial.name` if it's the only property?