Reorganize ELF Parser
These changes switch to using segments over sections to produce the output binary. This now matches how the specification says memory should be loaded. The sections also point to the same locations just with more detail such as section name (.text, .bss, etc) which is ultimately unnecessary if the only goal is to create a bootable bin.
I also changed how the data is passed around to help avoid dangling pointers/references and/or extra copies. Previously the function building the bin would return a vector, with this change the vector is passed to the function that will then fills it with the binary data.
I tested this with the problem elf from #13 , 2ndmix, and dcload-ip
since it's got the issue with a .stack segment existing in the elf
before RAM.