Keyspaces

__This is the first half of the keyspaces work.__

This adds a new set of keyspace objects which encapsulate the code required to generate full keys, routing keys and various masks.  You can create a new keyspace with a helper function:
```python
nengo_default_keyspace = utils.keyspaces.create_keyspace(
    'NengoKeyspace',  # "Class" name (this calls type)
    [('x', 8), ('y', 8), ('p', 5), ('i', 5), ('d', 6)],  # List of fields and widths
    'xypi'  # List of fields used in routing
)
```
Creates (a class for) the default keyspace we use.  Instances of this keyspace can be called on to generate keys, masks, etc.:
```python
>>> ks = nengo_default_keyspace()
>>> ks.mask_x == 0xff000000
True
>>> ks.mask_y == 0x00ff0000
True
>>> ks.key(x=1, y=1) == 0x01010000
True
>>> ks.routing_mask
0xffffffc0
>>> ks.mask_d
0x0000003f
```

Each Edge is now assigned a keyspace (the default), which is used when generating routing info and writing output keys into regions of memory.  The `pre_prepare` function for each vertex is used to generate a list of outgoing connections (splitting on transforms/functions/solvers/evals/.../keyspaces as required) and this is hooked in to provide the `i` in the keyspace (as before).

All examples work with this, (all tests pass) and encapsulation is improved.
Phase 2 (for which I'll open a 2nd PR) will add the ability to preset field values, which will be used for implementing Jorg's robot protocol where things like `i` need to be set in advance.