Add unimplemented pin-post E2E tests.
Single column layout

Layout replies to the article vertically, if CSS class .dw-hor is absent.
- For each article reply, indent last child reply, because there might be
  additional article replies below (unindented)
- Add an arrow to above-mentioned last child reply
Make a PNG arrow look better.
Use single column layout if device < 1000px wide & high.
Work around position:static not clickable problem.
Fix Samsung zoom bug

This fixes a problem with a Samsung Galaxy S4 Mini: when clicking
a <form> <input> text field on a large page, Samsung zooms out, so the
<form> becomes tiny and unreadable. And after this it's not possible to
zoom any more at all. Seems like a Samsung bug, and apparently it's
triggered by an old bug workaround I wrote for my HTC Desire S phone,
because if I remove that bug workaround (it's not needed anymore anyway,
apparently), Samsung works fine.

Reproduce bug:

On Samsung Galaxy S4 Mini, open demo page 1 (www.debiki.com/-71cs1),
rotate phone to landscape view, click article reply button, click
"Post as ...", click the last text input (the "Website: (optional)"
input). Now Samsung Galaxy zooms out so the dialog becomoes extremely
tiny, placed in the upper left corner. And it's no longer possible
to zoom in/out at all. Even after I've closed the dialog.
Add SecureSocial login options to admin login pages.
Use (Login, Identity) instead of LoginRequest

Alnd use loginGrant, not loginReq, when calculating quota, in
saveLogin() in dao-db.scala.
Fix E2E tests

- Since _target=blank removed in admin page, use goBack()
- Control click to open in new tab, now when I've removed _target=blank
- Fix link: change /-/new-website/ to /-/create-site/
- Comment out _site.conf test, since that page is now hidden
- Fix newline bug: use stripStartEndBlanks()
Add and use classes LoginAttempt, IdentityRef, OpenIdDetails

- Let Login.identityXxx be an IdentityRef, not a simple String
- Remove `email` and `displayName` from Identity
Remove `_fakeLogin`, avoid using post.identity_!.userId

Use post.userId instead.
Make debiki-tck-dao work with LoginAttempt.
Pretend to have sent '@ex.com' emails.
Add type and creation date fields to Email

And pass email id to email body generation function.
Add JBCrypt and password hashing functions.
Add PasswordIdentity and create-account pages
Connect create account page with create site page, upgrade debiki-dao-rdb

- Place choose-owner page first in create-site wizard
- Have SiteDbDao.createWebsite() accept PasswordIdentity:s
- Add a /-/login-password route
- Change login.scala.html to use my LoginWithPasswordController, not
  SecureSocial.
- Have LoginWithPasswordController redirect to a `returnToUrl`
Rewrite login dialog: Add password login

This includes:
- Add more Twitter Bootstrap JS files: collapse.js
- Don't require a returnToUrl in LoginWithPasswordController
Use child dialogs instead of accordion in login dialog.
Make Google and Yahoo login buttons work.