runtests: Show operands of failed tests' assert statements

This uses ast module (if available) to rewrite assert statements of the form:

assert expr_0 cmpop_0 expr_1 cmpop_1 ... cmpop_n expr_{n+1}

to:

(sym_0, sym_1, ..., sym_{n+1}) = (expr_0, expr_1, ..., expr_{n+1})
assert sym_0 cmpop_0 sym_1 cmpop_1 ... cmpop_n sym_{n+1},
    "%s cmpop_0 %s ... cmpop_n %s" % (sym_0, sym_1, ..., sym_{n+1})

Line numbers are preserved on assert statements. On short test runs there is a
small but visible speed penalty (e.g. under 10% for sympy/polys). However, full
test suit run isn't affected that much.

Plain bin/test:

$ bin/test sympy/polys/tests/test_rings.py
============================================================ test process starts ============================================================
executable:         /usr/bin/python  (2.7.2-final-0)
architecture:       64-bit
cache:              yes
ground types:       gmpy 1.14
random seed:        52276056
hash randomization: on (PYTHONHASHSEED=2961690477)

sympy/polys/tests/test_rings.py[12] .......F....                                                                                       [FAIL]

_____________________________________________________________________________________________________________________________________________
___________________________________________ sympy/polys/tests/test_rings.py:test_PolyElement_pow ____________________________________________
  File "/home/mateusz/repo/git/sympy/sympy/polys/tests/test_rings.py", line 78, in test_PolyElement_pow
    assert f**0 == 3
AssertionError

=========================================== tests finished: 11 passed, 1 failed, in 0.03 seconds ============================================
DO *NOT* COMMIT!

Enhanced bin/test:

$ bin/test sympy/polys/tests/test_rings.py -E
============================================================ test process starts ============================================================
executable:         /usr/bin/python  (2.7.2-final-0)
architecture:       64-bit
cache:              yes
ground types:       gmpy 1.14
random seed:        57370498
hash randomization: on (PYTHONHASHSEED=4164250690)

sympy/polys/tests/test_rings.py[12] .......F....                                                                                       [FAIL]

_____________________________________________________________________________________________________________________________________________
___________________________________________ sympy/polys/tests/test_rings.py:test_PolyElement_pow ____________________________________________
  File "/home/mateusz/repo/git/sympy/sympy/polys/tests/test_rings.py", line 78, in test_PolyElement_pow
    assert f**0 == 3
AssertionError: 1 == 3

=========================================== tests finished: 11 passed, 1 failed, in 0.06 seconds ============================================
DO *NOT* COMMIT!
Add test test_J14
Add test test_J9
Add test test_J8
Add test test_J7
Add test_M21
Add test M22 and comment about M16
Add tests M23, M24, M26
Add M27-M39
Add tests N1 - N11
Changed tabs
Merge branch 'issue694'
Merge branch 'master' of git://github.com/sympy/sympy into issue694
Added dot product tests from different frames.
Minor Fix.
Added print statements and modified assertion tests
Added correct print statements
Assertion tests satisfying new trigsimp changes
Merge branch 'master' of git://github.com/sympy/sympy into issue694
Add several tests in part M