rewrite web client to use leaflet
move error marker code into a subclass of L.Marker

also changes popup html content to be created when the popup is shown
instead of when the marker is created. this should save some ram and
also fixes the form values after a comment is submitted
use PDO instead of mysqli

we still depend on MySQL, but PDO allows for simpler syntax in some
cases
add selectable base layer