Pickle and Unpickle theano functions

Added a test case to verify if pickle and unpickle a compiled theano function works.
Passed.

This is the follow up of gh-1945
The pickle_rm_attr is to remove attribute on the FunctionGraph instance, not on the feature that is in it. THis is because the feature add stuff in the function graph.

Here the history is in the feature, not in the FG. So this is why it isn't in the pickle_rm_attr list.

I find the pickle_rm_attr stuff ugly, but I don't think for now of a better generic way. We could add new callback for those name in the FG, but I don't like that better. This will cause special code in the FG for many feature we do and this isn't nicer.