I've seen it done both ways, but I think putting the bootloader at the end of program space works the best. That's the way MC Loader does it.

The code at locations 0000-0003 are also part of the bootloader. It's usually a GOTO instruction that jumps to the bootloader code itself. And when the bootloader actually loads the program, it moves the instructions that would normally go there, to a location just before the bootloader code, so that it can know where to start execution of the main program.

Just recently Charles Linquis was working on a similar project
http://www.picbasic.co.uk/forum/showthread.php?t=6167

Last I heard, he was re-writing it again.
Maybe not as easy as it seems.
<br>