Update Oct 21 2017
There are some changes with the Byzantium fork - getTransactionReceipt(...).status
now returns 0 for a failed transaction and 1 for a successful transaction. EtherScan.io displays this status in the TxReceipt Status: field for transactions. See How do I detect a failed transaction after the Byzantium fork as the REVERT opcode does not consume all gas? for further information.