Fees should be voluntary not imposed.
They are. You can set up / custom code your client to not send fees.
What you can't do is make nodes relay your transaction, or make miners include your transaction in a block. That's their decision, not yours.
This sets up a situation like today, where coinbase accidentally pyramided hundreds of transactions on top of two unconfirmed base transactions that were very large and did not have sufficient fees, and suddenly hundreds of people (including myself) are waiting more than 24 hours for confirmations. You can volunteer for this any time you want by changing your client to not include transaction fees.
You can not tip your waiter, too, but if the service was good it's nice to pay for it, especially if you plan to keep coming back.