make byte order types IO wrappers

Converts the ByteOrder types introduced in #3633 to IO wrappers.

Works quite well, requiring no changes for existing `read`/`write` methods. However, I seem to be getting some ambiguous dispatch errors that I can't seem to fix, e.g.
```
Warning: New definition 
    write could not show value of type Tuple at io.jl:66
is ambiguous with 
    write could not show value of type Tuple at io.jl:50.
Make sure 
    write could not show value of type Tuple
is defined first.
```
but when I switch them I get them the other way. Any ideas?