Hi David,
Interesting post. Curious if that boat of yours is something in the order of 44' with sails 
Starting at the bottom, yes, I have the exact same code as you for displaying the resource usage, but for now, I have commented it out. To use the 'printf' statement I believe you also need to 'undef' it, like this;
#undef printf
See:
[// Arduino Playground - Printf](Arduino Forum Arduino Playground - Printf)
printf on DUE - Arduino Due - Arduino Forum
I don't recall what my values were, but free mem was about 80KB.
I also ordered a few of those ADS1115 from element14 which arrived yesterday,.
All I need to do is somehow solder these tiny SOP10 things to a carrier board that give me a larger DIP10 that I can then mount to vero board.
No, I don't have my I2C device in bread-board, I soldered it directly to the vero board of my solar charge controller.
Actually, your point of the CAT6 cable and using discrete wires rather than pairs is a god point.
I currently have SDA and SLC on a single pair, and now that I realise it, that is not a good idea.
So, before I throw these I2C port expander out and use direct I/O from the DUE, I will pull it all out again and make the cable change.
I went away from using a library and just using direct Wire commands and capture the errors and error count from the TWI commands to the device.
It works for some period of time and then it appears to get stuck and I get TWI error code 2, which is a NAK.
To rectify, I need to power cycle the I2C device.
This is totally not acceptable for my situation, where I need to have reliable control of the power from the solar panels going into 400Ahr of Lithium cells.
I don't know in regards to the Wire library, if there are any other solutions.
I am still on 1.6.1 at present and I could look at the change log for the Arduino libraries to see if any improvements or fixes have been made.
But I think it is not a library problem, even in your case.
The other thing that I thought of is that with the wire library, when a request is made to a device, the wire code does seem to go into a wait loop, to wait for the response from the device. Now, with my code, I also use timer interrupts to provide accurate timing for other functions such as PID, and have been thinking that it may be possible that when one of these interrupts occur during a wire wait loop, that that may well mess things up.
For me, it really looks like I will end up using DUE I/O rather than the port expander, and already have the multi-core cable ready to solder into the situation.
Using the ADS1115, for me, shouldn't be a problem as I will use it for non-critical functions.
If you are using the ADS1115 for voltage and shunt measurements, then you may be interested in the following device, a INA219, which can be bought on a board from Adafruit.
I had a few arrive last week, though haven't used them yet.
I also got some INA226, which can measure the bus voltage up to 36 volts dc, which suits my solar setup as I'm on 25.6 Volts, and that would exceed what a INA219 can take. The INA219 is for another project.
They can measure current, volts and then calculate power as well in Watts.
Yes, I used the I2C scanner initially to verify the device was being seen by the DUE.
I better go and check on what is happening with those power MOSFETs 
Paul