Use a protocol and defrecord for 2D vectors