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.
`continent` is not a property of `spatial` in MAPv3.1 JSON-LD, so we should not be mapping it to a distinct property. `continent` could map to `spatial.name` if it was the only value that was there. (Note: we should probably run this by Gretchen.)