A few improvements to function()

The main contribution is preventing users from replacing input variables with the ``givens`` parameter to ``theano.function()``.

Note that there may actually be some use-case for this feature, I'm really not sure, so let's see if tests pass...