Extract file system based functions into template loaders

I hit the same issue as #370 when I tried to use swig in browser. Precompiling templates is not useful in some cases and does not work with latest code. That is why I tryed to fix it and and add some flexibility. 

Loaders provides interface for extending swig for using  different template sources. By default FileSystemLoader will be used and it acts as current swig implementation. As an example I added MemoryLoader which might be used in browser. It loads templates from predefined hash object. 

I know that my pull request needs to be updated with more documentation and tests, but I want to know you opinion about it before. 

Thank you