Well, it's up to them to define "spam", isn't it? And so far the transaction fee method of spam mitigation seems to be working out ok, right?
No, it's working out terribly. The majority of spam is not filtered by the fee method.
But there would be more of it (both successfully mined into the blockchain, and blocked attempts) if the fees were not there at all. There is a purely-deterrent effect. There is a blocked-by-the-client-software effect. There is a blocked-by-peer-nodes effect. If the fees were non-existent, or orders of magnitude lower, then I think the spam (actualized and attempted) would be orders of magnitude higher.
The code forms the entirety of the social contract. "Code" referring to officially sanctioned code that comes out of the official Bitcoin developer team. This code defines a set of rules, which enables trustless transfer of value. While I do agree with the goal (and indeed the necessity) of decentralization, I think that it can be taken too far. Everybody needs to play by the same set of rules. I don't think that some miners choosing to mine X transactions, while other miners reject them, is a good idea. There needs to be consistency between miners in order for the network to perform in a predictable manner, and performing in a predictable manner is the only way that Bitcoin will see greater adoption. (I seriously wanted to punch somebody when I sent like $500 worth of BTC in a straightforward transaction, and it wasn't confirmed for hour after hour due to the QT client not including a mining fee.... having that money out in unconfirmed limbo, when I could have included a 10¢ fee that would have gotten it included in the next block, was infuriating. But no, the fee wasn't even an option in the QT client. This is the kind of thing that makes end-users abandon a platform forever.)
The code is the Constitution, if you will. It defines the rules. There is no judicial branch to interpret the code. Just the code. There is no dicta, no Talmud, no human intervention, no wiggle room. Either a transaction fits the rules of the code, or it doesn't. Pure algorithmic consensus. This is the promise of Bitcoin, the great problem solved by Satoshi.
No, the code is just an implementation. At most, it defines the protocol. That's just part of Bitcoin - and not the part responsible for the spam filtering. Miners are another part, responsible for that.
The code of the reference client (more specifically, bitcoind) IS Bitcoin. It is the DNA that directs the cell. It is the blueprint that defines the house. You could lose everything else -- cgminer, pool management software, whatever -- and Bitcoin could survive on just bitcoind alone.
The reference client implements a fee system. If this fee system is not honored by miners, how is the average user going to be able to trust Bitcoin?
There is no need for "consistency" between miners (actually a harmful thing to Bitcoin). If you need your transaction confirmed ASAP, you will just have to make it attractive to all miners and hope they take it. It's not going to be confirmed for 5+ blocks after it's mined anyway, so even if you have to wait a block or two for it to be mined, it's really not that big of a deal.
Transaction fees have always been an option in Bitcoin-Qt.
I know about the 6 blocks confirmation for most reasonable transaction partners. I am talking about literally hours (over 10 hours for sure, when I came back the next day it had finally been included in a block) sitting there at 0/unconfirmed. Checking on blockchain explorers, seeing the transaction there with the note "Expected confirmation in the next block" or something to that effect.
The Qt client allows you to choose not to include a fee, if you don't want to and it thinks that you should. But, AFAIK, it does NOT allow you to arbitrarily add a fee to a transaction that it thinks should be fee-free.
I had sent other similar transactions before and never had a problem. In those transactions, was prompted to include a fee and did so. The one time that Bitcoin-Qt did not prompt me to include a fee (I guess because the coins had aged sufficiently), I waited for many hours before the transaction was included in a block.