Flexible keyspace

__Based on #32.__

Moderate support for #34.  Two domains are proposed: the "pure" Nengo domain where keys continue to take the `8{x,y}5{p,i}6d` format (these are the only form of keys _output_ by Ensembles), and an external domain where keys can take a greater variety of forms (as required by Jorg's new robot protocol).  Edges have slightly more control over the form of the key used to represent them, but this has yet to be fully nailed down - regardless, I propose merging this and adding additional flexibility as and when required.

Input is more flexible, with each filter route now also specifying a dimension mask which is applied to a key to extract the dimension.  All components using input filters (Ensembles, Filters, SDP-Tx) have this functionality by default.  The dimension mask is set by the edge (`dimension_mask`) and defaults to 6 bits (`0x3F`).