oct 0.26.0

Octonary transcodings.
Documentation
Both [`Serialise`] and [`Deserialise`] can be
derived for structures and enumerations:

```rust
use oct::io::{Cursor, Deserialise, Serialise};

#[derive(Debug, Deserialise, PartialEq, Serialise)]
struct Struct0 {
    pub field0: char,
    pub field1: bool,
    pub field2: f64,
}

#[derive(Debug, Deserialise, PartialEq, Serialise)]
struct Struct1(pub i128);

#[derive(Debug, Deserialise, PartialEq, Serialise)]
struct Struct2;

#[derive(Debug, Deserialise, PartialEq, Serialise)]
enum Enum {
    Variant0 {
        field0: char,
        field1: bool,
        field2: f64,
    },

    Variant1(i128),

    Variant2,
}

let mut buf = Cursor::new([0; 1024]);

const STRUCT0: Struct0 = Struct0 {
    field0: char::MAX,
    field1: true,
    field2: f64::MAX
};

const STRUCT1: Struct1 = Struct1(i128::MAX);

const STRUCT2: Struct2 = Struct2;

const ENUM_VARIANT0: Enum = Enum::Variant0 {
    field0: char::MAX,
    field1: true,
    field2: f64::MAX
};

const ENUM_VARIANT1: Enum = Enum::Variant1(i128::MAX);

const ENUM_VARIANT2: Enum = Enum::Variant2;

STRUCT0.serialise(&mut buf).unwrap();
STRUCT1.serialise(&mut buf).unwrap();
STRUCT2.serialise(&mut buf).unwrap();
ENUM_VARIANT0.serialise(&mut buf).unwrap();
ENUM_VARIANT1.serialise(&mut buf).unwrap();
ENUM_VARIANT2.serialise(&mut buf).unwrap();

buf.set_position(0);

assert_eq!(Struct0::deserialise(&mut buf).unwrap(), STRUCT0);
assert_eq!(Struct1::deserialise(&mut buf).unwrap(), STRUCT1);
assert_eq!(Struct2::deserialise(&mut buf).unwrap(), STRUCT2);
assert_eq!(Enum::deserialise(&mut buf).unwrap(), ENUM_VARIANT0);
assert_eq!(Enum::deserialise(&mut buf).unwrap(), ENUM_VARIANT1);
assert_eq!(Enum::deserialise(&mut buf).unwrap(), ENUM_VARIANT2);
```

Untagged unions, however, cannot derive them:

```rust,compile_fail
use oct::io::{Deserialise, Serialise};

#[derive(Deserialise, Serialise)]
union Union {}
```