Revised endianness handling
This is a three patch series of changes to the way endianness is handled in binrw.
The first patch adds metadata traits (ReadEndian and WriteEndian) that are used as a bound on the read/write functions that do not explicitly include an endianness. Native endianness convenience functions were only on the extension traits and not on the BinRead/BinWrite traits, so this patch also adds ne functions to those traits so everything is consistent. Because I suck at splitting commits, it also replaces the HasMagic trait with ReadMagic and WriteMagic traits that are separately defined for read and write. Nothing new is re-exported from root. HasMagic is un-re-exported from root.
The second patch gets rid of the Native variant of Endian and replaces it with an Endian::NATIVE const that is either Endian::Big or Endian::Little. This is an independent thing that makes sense regardless of whether the first thing make sense, but is related enough to consider here at once.
The final patch removes a Default from Endian, which I feel is like probably the most controversial change, but also since the whole point of this thing is to avoid people accidentally getting the wrong endianness it again seems to make sense to me that there should not be a default. If there is still a default I think it should be consistently Little, since otherwise someone defaulting the endian will once again end up accidentally opting in to architecture-defined behaviour.
OK GLHF TEAR ME TO SHREDS or don’t whatever