Simplify error handling

This removes the PGError interface, and moves all existing types to the Error type.
The default representation of a Error now uses the human-readable 'Message' field. 

This additionally removes the potentially-confusing two-layer recover() situation in conn.Open()
Add ErrorCode type and test