Infinite Time Turing Machines and their Applications