Revamped dispatch system and improvements (WIP)

- Find result sets based both on name of outer function (if present)
  and type of evaluated input.
- Display a 'Result' card for inputs like `lcm(2x, 3)` as well as the
  standard set of results.
- Automatically format the 'Result' card if it returns a list (e.g.
  `solve(3x^2 + 4)`
- Nicer LaTeX formatting for: solve_poly_system, factorint, nextprime,
  nextprime, isprime, prime
- Get rid of FakeSymPyFunction hack
- Move card evaluation code into SymPyGamma class from views.py
- Get rid of hacks to format integrate as an Integral, diff as a
  Derivative, etc
- Use a 'components' system to extract information about the input.
  For instance, for `integrate(2x+3, (x, 1, 3))`, the components
  would be `{'integrand': 2x+3, 'variables': [x],
  'limits': [(x, 1, 3)]}`.
Fix derivative/integral steps
Fix result sets for diff, function
Add transformation for synonyms
Reindent JS file
Add 'Did you mean?' feature (WIP)
Modularize templates
Allow changing of variable in results (WIP)
Fix bug in latexify
Add /random URL
Refactor some of the logic
Add 'Polynomial with this root' result
Allow user to enter plot, graph, or draw to plot
Update to latest SymPy
Patch implicit transformation some more (should be in SymPy)
Fix diffsteps/intsteps on integral/diff result pages
Add more detailed exception info in result cards
Do not recurse in utils.arguments()
Get rid of sympify hack in result sets
Matrix result sets (WIP)