Add a ByteOrder trait for abstracting over endian conversions

The `Bitwise::swap_bytes` method was also moved into the `ByteOrder` trait. This was because it works on the byte level rather than the bit level.

[breaking-change]

`core::num::Bitwise::swap_bytes` was moved to `core::mem::ByteOrder`
Use ByteOrder methods instead of free-standing functions
Fix comment formatting