Migrate to the latest Auth snaplet backend API

These changes will be required for snap-0.10

See https://github.com/snapframework/snap/issues/30 for more
information.
Upgrade to snap-0.10 and handle more login errors

Handle empty login error in the new user creation form.
Add a few more features into the example project

- Execute database table creation on app initialization.  This creates
  a simple schema if the db tables do not already exist.

- Demonstrate how to access and use the logged in AuthUser to save
  data into user's own tables depending on who's logged in.

- Implement a form that the logged in user can use to save comments
  into his "comments list" (kind of like a naive todo list without a
  checkbox for marking todos completed :))

- Also demonstrates rendering a list of elements within a Heist
  template.

Routing is still messy.  '/' gets routed to the wrong handler.  So
when you run the app, browse to http://localhost:8000/index to see the
correct page.  Do the same after login too.

WIP for issue #1
Server the root '/' URL correctly

Also rename the Model module to Db and import it qualified.  This is
done just to highlight which calls in the example call into the
database.

Serve /static under /static path.

Work in progress for #1
Update docs
Clean up code, comments and templates

+ Apply some hlint fixes while at it
Remove lambdas with const + simplify
Switch to new lens
lens package version bump 

Align versions with snap-0.10
Align lens version with the rest of snap
Fix build break w.r.t Snap's new password reset

Only fix enough to compile.  Reset password functionality will not
work with this commit.  Will be fixed in later commits, as soon as I
have some unit tests ready for this code.
Rip unit testing skeleton from snap
Add a createUser test + enough framework to run it
Match my default Emacs indent settings
Fix current working dir bug in snaplet initialization

The snap server thread was started correctly in its own sandbox temp
directory.  However, tests were not running in sandbox dir but in
where ever the test suite was started from.  This is a problem because
tests also call into appInit like

    assertGoodUser = do
      let hdl = with auth $ createUser "foo" "foo"
      res <- evalHandler (ST.get "" M.empty) hdl appInit
      either (assertFailure . show) (assertBool failMsg . isRight) res

which means tests get their snaplets initialized in the wrong
directory.
Don't start a server for testing snaplet-sqlite-simple handlers

No need to start a web server just to test simple db init / query
functions.  So delete server init & start up code.
Add simple unit tests for creating and updating users
Remove unnecessary imports
Add some basic db init tests

This is all being done in preparation for later support for migrating
the snap_auth_user from the initial version to later schema versions.
Add schema versioning & upgrade framework

Add logic to figure out at what schema version the auth database is.
If no auth tables have been created, create it and run it through
schema migrations.

This moves away from the old code of creating the snap_auth_user table
based on the AuthTable.  This old approach wasn't very schema
versioning friendly, so switch to explicit SQL instead.

Add support for the new snap-0.10 password reset fields in the schema.