Enhanced open

This PR changes the `open` method to use `io.open` (note that in Python 3 the latter is just an alias for the `open` built-in function). All methods that used the `open` built-in function directly have been changed to use `Path.open` instead, so that a subclass only has to override one method to implement a customized open.

In addition, newline patterns have been moved to module-level variables, and regular expression matching is used for removal and replacement. This makes related code more efficient, compact and easier to maintain.
Aah. Good point. My preference would be to support whatever args are supported by the underlying function, especially as that's what was supported previously on Python 3. In this way, the function is always a drop-in replacement for any code currently using `io.open` (on whatever platforms the client code supports).