Made a speed improvement for some comparisons

_aresame and Basic.__eq__ had to increase in complexity a little in order to
deal with cacheless operation. This makes a change to speed them up a little
(or in some cases, a lot). Uses zip_longest from itertools rather than zip in
the function _aresame. This way, if two objects don't have the same number of
arguements, they will not be equal. Previouly, if you had two similar objects,
i.e. f(x, y, z) and f(x, y), occasionally they would be equal, because the z
symbol wouldn't be checked against None.