Well, you are specifying in your linker script that you want a binary file out of your kernel.
ld -T script.ld -o outfile *.o
would basicly take your script... make it the whole truth for ld, and then link into outfile.
Now, since your script says you want binary, the result will lack any sort of symbol or section information. In fact, "binary" format files don't even have any identification as to what they contain, so objcopy will be unable to work with files like that..
Anyway, if you've moved to ELF, that's going to make your life easier. But keep in mind, you can't load an ELF file by just dumping it into some point in memory... so if you still don't wanna use GRUB to load your kernel, check out ELF file format.
You'd only need to really look at elf-headers to find where program headers are, and then parse program headers to see what to load and where. For loading a kernel, the relocation stuff and dynamic linking and whatnot ain't very useful, so just ignore.