posse-post-discovery: reduce number of NDB operations

- do one query for all permalinks on a page, rather than querying
  for each permalink individually
- when refetching blanks, don't delete blanks unless we actually
  find something to replace them with (moved the deletion code
  to SyndicatedPost.get_or_insert... so that it's all part of
  the same transaction now)
posse-post-discovery: limit IN query to 30 items
posse-post-discovery: more aggressively canonicalize urls

remove call to follow_redirects in refetch loop.
converts the following:

* twitter -> https://twitter.com/... (no http and no www)
* facebook -> https://facebook.com/...
* instagram -> http://instagram.com/...
* google+ -> https://plus.google.com/...
posse-post-discovery: clarify SyndicatedPost.get_or_insert

Restructed get_or_insert_by_syndication_url to be much clearer
about what happens in the different cases, and added comments to
the same effect.
posse-post-discovery: clean up canonicalize tests

use for-loops to eliminate redundant assertions for the
same expected result URL
Merge pull request #200 from kylewm/ppd-canonicalize-urls

posse-post-discovery: more aggressively canonicalize urls
minor noop docstring fix
linkify links in log output. inspired by #187
Merge pull request #199 from kylewm/ppd-optimize-deletes

posse-post-discovery: reduce number of NDB operations
source URLs: RSVP_USER_ID is always a numeric user id
log poll task log URL during propagate task. fixes #187
unicode bug fix for log rendering
canonicalize permalink.php?story_fbid=... facebook syndication urls

e.g. `facebook.com/permalink.php?story_fbid=314159&id=212038` =>
  `facebook.com/212038/posts/314159`

for #193
publish: when no mf2 found, also mention mf1 in error message since we're backward compatible
follow redirects to resolve mention URLs as well as in-reply-to, etc URLs

fixes #203
new FAQ: twitter's search API is best effort only. :/ fixes #202
minor style tweaks
render event rsvps nicely on user pages
remove uid from mf2 html h-card; it was doing more harm than good. for #204, cc @aaronpk
/cron/replace_poll_tasks bug fix: include status 'error' as well as 'enabled