Kinetic activation-relaxation technique: An off-lattice self-learning kinetic Monte Carlo algorithm | Synapse