Update latex printing of Rotation

Update Rotation operator to use \mathcal to render with LaTeX
Implement new printing scheme for QExpr

The new printing system is as follows:

- The base QExpr printing methods call _print_contents. The
  _print_contents methods is where classes define a unique list of
  arguments to print as the contents. Note, this should not include
  outer parentheses or brackets.

- By default, _print_contents returns _print_label.

- _print_label should not be modified in the base classes, it is
  reserved for printing the label of the class, which in almost all
  cases is the args list.

- Adding other things to the printing of the object, such as an operator
  name to operators or brackets to states, the class should override the
  _print/_pretty/_latex functions directly and make calls to
  _print_contents. This allows things like InnerProduct to easily
  control its printing.
Fix printing of unicode characters when use_unicode=False

Fix cases where unicode strings were returned when pretty printing when
in a non-unicode environment.
Change state and innerproduct printing to allow for tall states

Add methods to allow for the creation of tall bras and kets using box
drawing unicode characters and slash/backslash.
Better latex printing of operators

Modify operator printing to put \left and \right on surrounding
parentheses.
Add cg tests, fix up cg printing

Add Wigner6j and Wigner9j tests

Refactor printing methods in cg.py.
Improve printing states and brackets

Refactor how pretty printing of brackets for states is handled, moving
all logic for handling ascii vs unicode rendering and determining how to
render the brackets based on the height to a single method in StateBase.
This greatly simplifies the code in the state and innerproduct pretty
printing methods.
Fixup quantum printing tests
Merge branch 'master' into quantum_printing

Conflicts:
	sympy/physics/quantum/spin.py
Add docstrings for new quantum printing scheme
return None if no solution was found
Merge pull request #1233 from flacjacket/quantum_printing

Quantum printing improvements
return [] if no soln; dict flag to force return list of mappings
robustify detection of undetermined_coeffs
Make re and im call as_real_imag() (Fix Issue 754).

Since as_real_imag() uses re and im, its power was limited by the
fact that re and im were not able to call as_real_imag() in their
turn.  To cope with infinite recursion, a new hint was introduced,
which tells as_real_imag() whether to try to invoke re and im on
self or not.
Fix the LaTeX printing test.

The previous behaviour of re(x + y) which did not expand to
re(x) + re(y) was inconsistent with the output of
(x + y).as_real_imag().
Make coth.as_real_imag() to work like in sinh, cosh, and tanh  (Fix Issue 2899).

When they decide they have a real argument, sinh, cosh, and tanh
all set the hint 'complex' to False before they invoke expand().
This commit makes coth do the same.
Add the tests for the cases that now work.

Comments 15 and 16 on Issue 754 show examples of cases which failed
before the changes introduced in the previous commits.
Remove XFAIL from the test for Issue 2899.
allow sets to be returned from solve

>>> solve([x**2 - 3, y - 1], set=True)
([x, y], set([(sqrt(3), 1), (-sqrt(3), 1)]))

If there is no solution then ([], set()) is returned,
so if you don't care about the symbols you can always
select element 1. There is no guarantee that the symbols
returned will be in the same order that they were input,
so if there are multiple symbols solved for you should
pay attention to the returned list of symbols.