Proj4 projection

Hi all,

This change modifies `_EPSGProjection` by making it a subclass of a new `_Proj4Projection` which takes a proj4 string and optionally projection bounds as parameters. Also adds a `proj4` method to `crs.py` which calls the `_Proj4Projection` class directly so you can instantiate the projection given a proj4 string rather than just an EPSG code.

This has been ammended from the previous pull request to include unit tests and pull `_Proj4Projection` into `crs.py` instead of `_epsg.py` so that it doesn't have an implicit `pyepsg` requirement.

Any issues please give me a shout (and I'll email through the CLA tomorrow from work)