Normal Surfaces and 3-Manifold Algorithms