use html5 pushState instead of location.hash

closes #16. still needs production server support, but i'll handle that once our current alpha round is over.