Kinetic Monte Carlo simulation for semiconductor processing: A review