Add Approval.Temporary, rename MaybeApproval.approval to directApproval

Use _.isPermanent etc rather than comparing with case object.
Fix pending-moderation bug, and make message conspicuous.
Move view-page/posts controller functions to AppViewPosts.
Send user specific page data in JSON not YAML

I'm about to add even more data, and that is already in JSON.  Also, now
I'll get rid of the buggy YAML parser.
Make unit tests compile: I forgot to change ids from String to Int.
Add Post.ancestorPosts and unit test.
Show unapproved comments

When rendering a page, include any unapproved comments authored by the current
user.

- Add `showUnapproved` flag here and there
- Let AppEdit show the current version of a post, even if not approved.
- Refactor BrowserPagePatcher somewhat: break out function and add
  jsonForThreadPatches().
- Send as user-specific-page-data a JSON entry `threadsByPageId` back to the
  client, which contains the user's pending posts.
- Send to the client an `ancestorThreadIds` list rather than a single
  `parentThreadId`, when sending back post/thread patches.
- Call d.i.patchPage(myPageData) in debiki-cur-user.js.
Remove Approval.Temporary.
Remove unused Application.siteSpecificCacheControl

And change a `var` to `val`.
Let the server (not browser) generate "pending approval" messages

So that they'll be present when page rendered, not only just after posting
new unapproved comment.

Also tweak message text, remove a dead link.
Fix edited-post-patch bugs

- Show unapproved text
- Include new acttion link HTML (in case pen icon with num-pending-suggestions
  is to be shown)
- Bind actions to $oldPost, if it wasn't replaced with $newPost
Make E2E tests able to connect to database (use BoneCP).
Fix Post.currentVersionPermReviewed and currentVersionPrelApproved bugs.
Remove chatty "Edits preliminarily approved ..." text

It's actually dead code anyway.
E2E tests: Make clickAndEdit() more stable

Specify in which post to find any textarea, otherwise some other textarea is
sometimes found (although there should be none — perhaps it's some old textarea
that hasn't disappeared yet?).
E2E tests: Add `isSuggestion` param to clickAndEdit()

And check for changes always unless isSuggestion.
E2E tests: Let submitEditSuggestionsForm() scroll button into view.
Fix bug: Don't require post id after `?applyedits` URL param.
E2E tests: Comment out broken Gmail login approve/reject access code.
E2E tests: Let `reloadPage()` reset `replyFormSno` to 0.