Added weakkeydict
WeakRef dictionary by itself is essentially the same as no cache. Added
a fixed length deque to keep track of some keys
most of the key,value pairs we want to cache are not weak-referenceable,
get around this limitation by using both weakkey and weakvalue dicts
fixed typo in return statement
Implemented Python 3 functools.lru_cache as a class decorator compatible
with py2 and 3
Removed locks and some if statements to improve performance
add variable size to lru_cache through environment variable SYMPY_CACHE_SIZE
cache_debug now appropriately handles SYMPY_CACHE_SIZE
Various items listed as autoclass which should be autofunction
Classification for system of odes
Amendments on checking of linearity
Check for system of eq being solvable under classify_sysode

This PR contain methods to classify whether a given system of equation
is solvable by current solver. It is broadly divided on the basis of
parameters returned by classify_sysode which are linearity, no of eq
and order. If the return parameter by these methods is any "type" then
the given system is solvable otherwise None is returned which means
it is not solvable by current solving engine.
pretty printers for BosonOperator and FermionOperator
use _eval_commutator_class instead of testing with isinstance(..., class). Added rule that makes Boson and Fermion operators commute.
corrected bug in BosonOperator/FermionOperator pretty printing
Made the combined tensor product printing optional (opt-in). Should leave old code unaffected, but one can activate the more compact type of printing globally if one wants to
added pretty printer for combined printing of tensor products of ket/bra
Replaced 'interval' with less exact expression.
revert to old style tensor product printing of states in test
Started work on Linearizer Class

Implemented routine for constraints on position and velocity.
Unsure if it will work if either are missing, most likely will need
to add control flow for this. The API is also complicated, and will
be simplified as more code is ported over.

Also added one test for the new linearize routine. Based off of
the example in Luke and Gilbert's paper. As more functionality is
added to the linearization routine, the work done in this test
will get smaller. Still need to add more tests from the examples
I worked out last week.