I thought you had a choice of whether or not to pay a transaction fee, just like a miner has a choice whether or not to pick up your transaction? The transaction fee is there to incentivize miners to pick them up and work on them.
From the wiki:
Transaction fees are voluntary on the part of the person making the bitcoin transaction, as the person attempting to make a transaction can include any fee or none at all in the transaction. On the other hand, nobody mining new bitcoins necessarily needs to accept the transactions and include them in the new block being created. The transaction fee is therefore an incentive on the part of the bitcoin user to make sure that a particular transaction will get included into the next block which is generated.
It is slightly more complicated. Fees serve a denial of service prevention mechanism. As such nodes (aka peers or clients) will not relay tx which are "low priority" unless they have sufficient fee. The node doesn't get the fee but checking for the fee prevents an attacker from disrupting or degrading the network with little or no cost.
Today the nodes require a fee in order to relay the tx if is >1KB in size or has a priority less than 57.6 million.
https://en.bitcoin.it/wiki/Transaction_feesPriority is slightly complex but 57.6 million is "one bitcoin day". If you receive 1 BTC and wait 1 day you can send it without a fee. If you receive 0.1 BTC and wait 10 days you can send it without a fee. Now just because it will be relayed to a miner without a fee doesn't mean it will be included in the next block. Most (all?) miners limit the amount of space they reserve for free transactions. Some miners allocate no space for free transactions. If there are a lot of higher priority tx waiting you could wait a significant amount of time before the tx is included. For this reason I pay a fee on all transactions even those that might qualify for free.
If the tx doesn't qualify for free relaying then the node checks if the fee is sufficient.
For v0.8x the min fee to relay on "low priority txs" is 0.1 mBTC per KB
For v0.9x the min fee to relay on "low priority txs" is 0.01 mBTC per KB.
A client will also prevent the creation of a tx (this can be overriden by using raw transactions) that it would not relay itself. So a v0.8 node won't create a low priority tx with a fee below 0.1 mBTC per KB because it knows that other nodes will drop that tx just like it would if it was relayed a tx from another node.
v0.9.0 (and v0.9.1) are slightly different. Anytime the fee is reduced there is a chicken or egg problem. If v0.9 allowed creating tx w/ a fee of 0.01 mBTC per KB what happens if all the other nodes are running v0.8x? They would drop it because from their point of view it does not have sufficient fee. So as it has occured in the past the fee to RELAY is reduced first and once a sufficient portion of the network is upgraded then a new version is released which allows CREATING and RELAYING txs at that reduced fee level.
So the quote saying "fees are optional" is at best incomplete and is somewhat misleading. Yes fees are optional on low priority txs if you create a custom tx bypassing the default client rules and then are willing to accept the risk that all your peers will simply drop the tx meaning it remains not just unconfirmed but unknown to most of the network for an extended and possibly infinite period of time.
I would recommend most users (especially those building services and products using Bitcoin) accept for that most cases the min fee (0.01 mBTC per KB) will be required. I wish the network imposed the min fee on all transaction even those high priority, because as a merchant who accepts Bitcoins the number one issue is issues with insufficient fees. User sends payment w/ insufficient fee, it is dropped by other nodes, we (and most of the network) never sees the tx). User is sure he paid, we have no record, and eventually (could be hours, or days, or even weeks) it will be included in a block. It gets even more fun when the user tries to fix things by "deleting" the tx and making a second payment only to have the original payment eventually get confirmed in a block. It just creates a lot of customer support nightmare edge cases. Now we can advise users to include a fee on all transactions but there is always some % who don't (or their web wallet doesn't even give them the choice).