A Vector type where the key is a custom object to avoid mixing indices between vectors.

Example

```rust use keyed_vec::{KeyedVec, IndexLike};

[derive(Debug, Clone)]

struct Client { name: String, }

[derive(Debug, Clone)]

struct Order { address: String }

[derive(Debug, Clone, Copy)]

struct ClientId(usize); impl IndexLike for ClientId { fn to_index(&self) -> usize { self.0 }

fn from_index(i: usize) -> Self {
    ClientId(i)
}

}

[derive(Debug, Clone, Copy)]

struct OrderId(usize); impl IndexLike for OrderId { fn to_index(&self) -> usize { self.0 }

fn from_index(i: usize) -> Self {
    OrderId(i)
}

}

let mut clients = KeyedVec::::new(); let clienta = clients.push(Client { name: "A".tostring() });

let mut orders = KeyedVec::::new(); let order1 = orders.push(Order { address: "1".tostring() });

// mismatched types expected ClientId, found OrderId clients.get(order_1); ```