[WIP] Albatros: CPU/GPU shared variable #130

fixes #130 

Right now I am trying to debug my fix to work with the theano/tensor/tests/test_sharedvar.py unit tests. Have some topo errors that I don't really understand:

For this PR:

- [x] Fix don't change the shared var outside type during execution
- [ ] Use an internal variable with a type different then the outside variable type. Here we can force all Theano function to use the same internal type for a given shared variable. That way, we don't need to do automatic transfer between CPU and GPU.
- [ ] Add tests that check pickling/unpickling with changing GPU availability.
- [ ] don't have strange dependency on cuda in tensor

For another PR:
- [ ] support new GPU back-end
- [ ] Figure out how to have the shared variable be considered on different device in different Theano function.