load, save and general improvements

I am currently using ELFIO to load a binary, modify the content of one section and write it back to disk.
Unfortunately this seems not to be supported since the current load code does not extract the mapping between segments and sections. As a result you end up with empty segments. I fixed this in 5dd8ba2.

Another property which is required in my application is to deal with sections which are part of multiple segments. (.ARM.exidx) I rewrote the `save_segments_and_their_sections` function in 1d2930a to support this usage.

f78a519 is just a minor fix which removes const from the segment load function.

Although everything is working for me at the moment some external code review would be appreciated. Especially for the modified save functionality.

Anyway, thanks for this great library and keep up the good work!