Feature lattice

Implementation includes
- class LatticeNode: represents a single node of a lattice,
- class Lattice: describes a Bravais lattice (stores references to lattice nodes),
- factory routines for creating specific lattices (for convenience).
I think my original comment wasn't clear. Sorry.   My comment was more about 'lat_nodes' being public.  And I was suggesting to make it non-public so that users used the get/update methods defined in ABCLattice.

```python
lattice = la.make_square_lattice('lattice', 0.2, (12, 22))
node = lattice.get_node((0, 0))
node.data[CUBA.LABEL] = "hi"
lattice.update_node(node)
```
instead of 
```python
lattice.lat_nodes[node.id].data[CUBA.LABEL] = "hello again"
```
The unit tests which are using ```lat_nodes``` would have to be updated then