Combinatorial Nullstellensatz: Various proofs, extensions and applications