data_prob.py now calculates the gradient

Referring to class notes, wrote a function called
neg_log_probability_with_gradient (nlpwg for short), which returns a
tuple of the negative log probability and a gradient vector.