Support gradient checkpointing

#3