Refactor user data fetching
Migrate user image browser
Pass useful globals to HTTP 404 code
Fix password-based login

It broke during refactoring the user class.
Fix image hash insertion in migration script

Also:
 - Correct typo
 - Store intermediary output in /tmp
Set fetch mode only during fetchAll()

was previously before PDOStatement::execute() in DB::query_nofetch()
Add user image count
Convenience getter for user avatar path
Image class with query string builder

Database views would be a much better idea than to puzzle out
complex queries in PHP. Unfortunately MySQL/MariaDB 5.5 cannot
efficiently merge views with a GROUP BY clause into new queries.
Instead it uses temporary tables, which are awfully slow.
Image browser uses new image class
Migrate image viewer

Comments and tags are still missing though.
Use query builder to fetch images
Display tags again in image view
Rename comment table columns
Comment table column for last edit
Foreign key for parent comment column
Change comment rating calculation
Comment class

Again we build complex queries in PHP, because database views
aren't viable option. :-/
Migrate comment subsystem

Image now aggregates comment objects instead of ImageCatalog.
Load and display comments