You are not able to force IOUs upon anyone that they don't want - if you manage to trade a mattress IOU for RUB directly, this person has to have trusted the mattress IOU issuer explicitly.
What is more likely is that you trade mattress --> USD.Bitstamp --> RUB.RussianGateway which involves two atomic trades, where someone gets the mattress IOU they are willing to accept for USD.Bitstamp via an open market order and someone else gets these USD.Bitstamp and give you RUB.RussianGateway, as well through an explicit market order. There is no way the second person will end up with a mattress unless he/she explicitly want them.
All you're saying is that the Gateways do not accept anything but currencies from trusted Gateways. Fine, but you have the same problem, just less obvious.
You have an intrinsic inescapable Moral Hazard built into the system whereby Gateways are incentivized to over-borrow (issue IOU's), and then make it difficult to redeem.
And I hope you noticed that you have to keep restricting the trust in the system and remove the concept of liquidity provider entirely in order to get it to work. What you described above is a far cry from the original vision of Ripple.
Ripple works similar to your bank account: Whoever sends you money (e.g. I send you 10 EUR from Deutsche Bank) - it will be converted in the end via one or more intermediates to a balance of USD IOUs of your own bank. Yes, there might be special cases, I know, but the basic principle is that if someone sends you money from a different bank, you don't receive something that can be only redeemed at that other bank - you receive a balance with your own bank (gateway). Ripple just makes these conversions explicit and public, instead of implicit and hidden away (you cannot choose on a free market who exchanges my EUR.DeutscheBank to your USD.BankOfAmerika for example).
And the idea of liquidity provider returns with a vengeance...
Yes you
do receive something that can be only redeemed at the other bank.
Somewhere along the line the USD.A needs to end up at BANK.A in order to be redeemed. Otherwise; Open palm, insert face.
Say there's Bank A, B, and C and they issue the IOU's USD.A, USD.B, USD.C respectively. They are all liquidity providers for the others.
If USD.B or USD.C ends up at Bank A, then Bank A might redeem the dollars, but the bank has to turn around with those IOU's and redeem them at the other banks. There's no way around this. You can't just convert USD.B or USD.C to USD.A because that would reduce debt of the other banks and decrease the reserves of Bank A, exposing it to the risk of insolvency for no gain. (Ignoring that each unit of USD.A, USD.B, and USD.C has a different value in the market.)
That holds true for XBT, EUR, RUB, or any other currency.
There might be other people with different valuations etc. but the basic principle is still that of an open and free market for price (and through price: risk) discovery. Just like what's currently happening still with USD.MtGox vs. USD.Bitstamp.
You're correct in saying that markets calculate the value of IOU's among banks already. It works beautifully, so what's the point of ripple again?
In summary; If you get rid of the liquidity provider and allow IOU's of the same principal to have different values, then yes you can have a working trust-based media of exchange. What's the big deal?
We already have ways of managing trust among businesses. We can already exchange currencies with trusted businesses. Why should we be so enthusiastic about this?