Make enums extendable
In Rust 1.40, it is possible to mark an enum as non-exhaustive. This means that we can extend an enum without breaking existing code. For code that needs to compile with an older compiler, we could add a _non_exhaustive variant and hide it in the documentation. This is particularly useful for packets that may get a new version.