Hi Dave,
I am not sure that an app can do what you want. But you gave a solution yourself: Define Free Shipping as a discount. This way no buyers can use it with other discounts.
The downside is that buyers must fill in the discount code for free ...