Improve projector performance with Proj4 caching, arguments and avoidance

In #54, @hampelm and @prashtx mention several ways `projector` performance could be improved. This implements several of them. Namely:

1. Cache Proj4 instances so we don't create more than one for a given projection
2. Don't create Proj4 objects if we aren't going to use them
3. Allow users to pass in Proj4 instances so they don't need to be created at all