Implement temporary matrix pools

I have made pool use conditional on a tag until we decide to make significant use of it. When that happens I'll move the code into matrix.go.

	BenchmarkPool10by10Uncleared	20000000	        75.2 ns/op
	BenchmarkPool10by10Cleared		10000000	       167 ns/op
	BenchmarkNew10by10	 			 5000000	       404 ns/op
	BenchmarkPool100by100Uncleared	20000000	        75.5 ns/op
	BenchmarkPool100by100Cleared	  500000	      3809 ns/op
	BenchmarkNew100by100	  		  200000	     11998 ns/op