First, to clear things up, it isn't up to the exchange to quote a certain price/rate. It's all up to the users of that exchange what they ask/bid for a bitcoin. For example there are two exchanges, X and Y, with both have an ask one 500 USD and a bid on 400 USD. Then person A bids a higher price, lets say 470 (instead of 400), on exchange X. Person B asks a lower price, 430 (instead of 500), but he is one exchange Y, so their offers are never matched by the exchange itself. You however, are smarter. If you buy that coin (lets assume they both offer/ask a whole coin) from B, and sell it to A, you made a $40 profit (minus fees). Caching! Of course, these numbers are not plausible anymore. Think in cents/btc.
The discrepancy on different exchanges can indeed be the results of the effects you name. A few months ago, you could buy 'MtGox bitcoin', with a lower price then normal bitcoin. You weren't sure however that you could return that coin in the future.
But to answer your question, this arbitrage process can be completely automised and therefor fast as hell. There is no handwork involved anymore (just depositing/withdrawing USD/EUR). It is not very difficult to program (I half did it, without any knowledge in php or good programming skills), so there are a lot of scripts running, trying to make a small profit. Every ask/bid that has an arbitrage option is closed within tenths of a second. You cannot do it by hand. If you have made a script by yourself, you can get lucky if you import the data and execute your order at the right time.
edit: you can take a look at this site, they list options of arbitrage.