Implement new hashtag parsing for multiple citations.

This PR does two things:

- Separate the hashtag parsing function from interactions with the database, so that the semantics for SPnetwork post citations and topics can be defined and tested using only strings.
- Implement the above-mentioned semantic parsing. These semantics follow my understanding of what has been decided by the developers so far.  Specifically:
- Each post must contain the #spnetwork hashtag.  The first paper referenced after the post is considered the primary reference.
- Each paper reference may also be immediately preceded by one of the following "semantic" hashtags: #recommend, #mustread, #discuss, or #announce.  In this case, that tag is attached to that particular reference.
- If no semantic hashtag is provided for a given reference, the default #discuss is assigned.

Also separates hashtag parsing from DB interaction.
Updates relevant tests (without changing their content or intent).