Is -march=native forwards compatible such that code compiled with it on the oldest machine will run on the later models
In general, no. There is no guarantee that an arbitrary newer chip will have all the instructions present on some arbitrary older chip. Using one of GCC's named -march option would be safer, because newer families tend to be supersets of older ones, but -march=native isn't generally safe to use that way.
For these specific chips, I think it should be OK to use -march=native but why risk it? Either enable individual instructions sets with options like -msse4.2 -mavx or use a named option.
With a modern GCC you could just use -march=sandybridge which matches the first two, and doesn't use any instructions not supported by the third one (which I think matches -march=haswell). For GCC 4.8.2 -march=corei7-avx should work for all of them.
https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html shows which instructions are enabled by each -march option, or for GCC 4.8.2 https://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/i386-and-x86-64-Options.html lists them.