Merge pull request #41 from benjamn/reuse-replaced-Path-objects

Make Path.prototype.replace reuse replaced Path objects.
Implement types.visit as an alternative to types.traverse.

This work began over in the recast repository (see
https://github.com/benjamn/recast/pull/99), but ultimately it made more
sense to implement here, since I want to deprecate types.traverse
eventually, and I don't want to add recast as a dependency of ast-types.
Add tests of types.visit.
Don't expose computeSupertypeLookupTable on public ast-types module.

Exposing this interface was necessary when PathVisitor was implemented in
the recast project, but now that we've moved PathVisitor into ast-types,
it makes more sense to keep this interface private.
Reimplement types.traverse in terms of types.visit.
Politely warn about the deprecation of types.traverse.