Why are Tone.cpp and IPAddress.cpp getting built for my project?
As stated the IDE's equivalent to the make will compile anything everything it can find, in scope. But its linker has eliminate garbage enabled, hence anything not called or not static will not be linked into the EXE.

You can "avr-objdump -t" to create a map from your elf. And -d for an assembly listing. As to see exactly what is in the EXE, for your self. You need to enable show verbose output of compilation from the IDE's preferences, to display the temporary directory that contains the elf file. 

example:

C:\DOCUME~1\mflaga\LOCALS~1\Temp\build6395515806682540138.tmp&gt;C:\projects\Arduino\hardware\tools\avr\bin\avr-objdump -t MP3Shield_Library_Demo.cpp.elf &gt; MP3Shield_Library_Demo_wo_mem.cpp.elf.map
C:\DOCUME~1\mflaga\LOCALS~1\Temp\build6395515806682540138.tmp&gt;C:\projects\Arduino\hardware\tools\avr\bin\avr-objdump -d MP3Shield_Library_Demo.cpp.elf &gt; MP3Shield_Library_Demo_wo_mem.cpp.elf.lst


I did the above and commented out a call to a function member of my library, between subsequent builds. To see that the code was not linked into the assembly.