Universality and complexity in cellular automata