I'm part-way through my implementation of an x86_64 experimental OS and had to address all the issues you're facing right now. I didn't really document my process, but the code to get everything booted into x64 mode is there, including setting up the TSS.
https://github.com/beevik/MonkOS
In particular, the bootloader:
https://github.com/beevik/MonkOS/blob/master/boot/loader.asm