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"
	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.
[polys/agca] Start agca module.

Specifically: implement boilerplate classes Module, FreeModule, ModuleElement,
FreeModuleElement.

Adapt polyclasses to cooperate in module element multiplication.
[polys] Fix polyclasses arithmetic operators.

This was started in the last commit but not done completely.
[polys/agca] Implement submodules over polynomial rings.
[printing] Add angle brackets '<' and '>' to pretty symbology.
[printing] Implement pretty printing for basic module classes.
[polys/agca] Implement basic classes for ideals.

Also implement pretty printing and latex printing, extend ring domain
to have non-implemented method ideal(), and implement it for polynomial rings.

Tests in next commit.
[polys/agca] Add tests for ideals.
[polys/agca] Implement FreeModuleElement.__getitem__.
[polys/domains] Implement _sdm_to_vector for poly rings.

This is a helper method to convert distributed modules back to ring elements.
[polys] Implement unit detection for polynomial rings.
[polys/agca] Implement syzygy computation.
[polys/agca] Implement expression of submodule element in terms of generators.
[polys/agca] Add __pow__ operator to Ideal class.
[polys] Implement quotient ring domain.

Also implement some pretty printing, and some helpers in module/ideal
classes to "reduce" an element module an ideal/submodule.

Tests come in next commit.