Determinism, predictability and open-ended evolution: lessons from computational emergence