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).
@kemattil, I think that @nathanfranklin  suggests to not have an attribute named `lat_nodes` so that to encourage access to the container through the get/update methods of the
`ABCLattice` interface instead of the `.lat_nodes`. 

I think the problem starts from the definitions of words *private*, *public* and *protected*.  While c++ has a definition about these terms, in Python all are **public**. The *private* refers to using a single `_` by convention and *protected* does not really have an equivalent.