use pushState for SPA navigation, add submission page, use replaceState for search queries (fixes #3, fixes #7, fixes #25)