The Viability Kernel Algorithm for Computing Value Functions of Infinite Horizon Optimal Control Problems