evaluate Pauli matrices product
fixes paulialgebra whitespaces
pauli algebra fix product
pauli algebra doc spelling fix
added FunctionMatrix object

This is the SparseMatrix equivalent in the MatExpr family
Edits for docstrings of FunctionMatrix
added test_args test for FunctionMatrix
Better checks for Vectors, Dyadics in mechanics

The code for checking if an input was a vector or dyadic needed to be improved,
as 0's were "slipping by" sometimes. Also, consistently returns 0-vectors
rather than 0's from operations.
	Basic groups, orbit calculations, direct product, minor fixes

	Implemented constructors for symmetric, cyclic, dihedral and
	alternating groups as permutation groups, setting their
	basic properties.

	Replaced some of the orbit/stabilizer functionality present -
	the functions orbit, stabilizer, orbit_transversal - with faster
	implementations. Implemented Schreier vectors and
	group elements sending a given element to another element in
	its orbit.

	Implemented direct products for permutation groups.

	Made minor fixes in the docstrings and removed some duplicate
	functionality from permutations.py.
	Product replacement algorithm

	Implemented the product replacement algorithm for
	finding random elements in black box groups in the
	case of permutation groups, following the suggestions of
	"Handbook on computational group theory", pp.69-71
	Alt/Sym testing

	Implemented a Monte Carlo algorithm for fast testing
	whether a given group is the symmetric or alternating
	group. Random group elements are generated by the product
	replacement algorithm with the modification of Leedham-Green.

	Also, made some little optimizations on the constructors
	for Symmetric/Alternating groups so that the order is not
	calculated at initialization but when neede.

	Removed some checks from the Permutation constructor in
	order to speed it up.
Implemented Atkinson's algorithm
	Primitivity testing

	Primitivity testing in O(n^2) time where n is the degree
	of the permutation group, using Atkinson's algorithm
	following [1].

	A randomization used for quick generation of a large
	subgroup of point stabilizers is used to speed up the
	algorithm.

	Minor improvements/fixes in some of the previous algorithms.

	[1] "Handbook on computational group theory"
Piecewise._eval_interval(): Use an helper routine _sort_expr_cond().

There is an useful part of the code here that sorts the intervals on
the real axis and removes any overlap. We factorize this code out into
an helper function _sort_expr_cond() which can be called from elsewhere.
It is also useful to ask, what is the interval for a given condition?
So this is also implemented here, taking into account the overlaps.
Handle And() in condition to Piecewise. Replaces the use of Interval().

Interval() doesn't make sense as a condition to a Piecewise. It is
not clear which symbol is described by the interval. So instead,
we should use Interval().contains(x). In order that this works
properly, Piecewise needs to understand And() inside conditions.
Handle interval evaluation with symbolic bounds in Piecewise.

In [1]: p = Piecewise( (0, x<0), (x, x<=1), (1, True)); p
Out[1]:
/0  for x < 0
|
<x  for x <= 1
|
\1  otherwise

In [2]: integrate(p, (x, -5, 1))
Out[2]: 1/2

In [3]: integrate(p, (x, -5, z))
Out[3]:
/   0     for z < 0
|
|   2
|  z
<  --     for z <= 1
|  2
|
|z - 1/2  otherwise
\

In [4]: _.subs(z, 1)
Out[4]: 1/2
Add Piecewise tests, increase coverage.
	Docstrings, tests, minor fixes, named groups

	Improved the docstrings for the new functions
	introduced.

	Moved the functions creating
	symmetric, alternating, dihedral, cyclic groups
	to a separate file at the suggestion of
	D. Joyner (more named groups to be added later).

	Added tests for randomized algorithms.
Integers._intersect(Interval) produces Range
Integers.intersect(unbounded_Interval) is Intersection

The oo's were causing difficulty. This now fails gracefully and produces an
Intersection object