Add two new APIs in HandleTranslationUnitPre and HandleTranslationUnitPost.

Refer to the comments in slang_backend.h for detail.
diff --git a/slang_rs_backend.cpp b/slang_rs_backend.cpp
index 9acf338..7f4c4cb 100644
--- a/slang_rs_backend.cpp
+++ b/slang_rs_backend.cpp
@@ -96,15 +96,13 @@
   return;
 }
 
-void RSBackend::HandleTranslationUnitEx(clang::ASTContext &Ctx) {
-  assert((&Ctx == mContext->getASTContext()) && "Unexpected AST context change"
-                                                " during LLVM IR generation");
+void RSBackend::HandleTranslationUnitPost(llvm::Module *M) {
   mContext->processExport();
 
   // Dump export variable info
   if (mContext->hasExportVar()) {
     if (mExportVarMetadata == NULL)
-      mExportVarMetadata = mpModule->getOrInsertNamedMetadata(RS_EXPORT_VAR_MN);
+      mExportVarMetadata = M->getOrInsertNamedMetadata(RS_EXPORT_VAR_MN);
 
     llvm::SmallVector<llvm::Value*, 2> ExportVarInfo;
 
@@ -148,7 +146,7 @@
   if (mContext->hasExportFunc()) {
     if (mExportFuncMetadata == NULL)
       mExportFuncMetadata =
-          mpModule->getOrInsertNamedMetadata(RS_EXPORT_FUNC_MN);
+          M->getOrInsertNamedMetadata(RS_EXPORT_FUNC_MN);
 
     llvm::SmallVector<llvm::Value*, 1> ExportFuncInfo;
 
@@ -164,7 +162,7 @@
         ExportFuncInfo.push_back(llvm::MDString::get(mLLVMContext,
                                                      EF->getName().c_str()));
       } else {
-        llvm::Function *F = mpModule->getFunction(EF->getName());
+        llvm::Function *F = M->getFunction(EF->getName());
         llvm::Function *HelperFunction;
         const std::string HelperFunctionName(".helper_" + EF->getName());
 
@@ -216,7 +214,7 @@
               llvm::Function::Create(HelperFunctionType,
                                      llvm::GlobalValue::ExternalLinkage,
                                      HelperFunctionName,
-                                     mpModule);
+                                     M);
 
           HelperFunction->addFnAttr(llvm::Attribute::NoInline);
           HelperFunction->setCallingConv(F->getCallingConv());
@@ -302,7 +300,7 @@
 
         if (mExportTypeMetadata == NULL)
           mExportTypeMetadata =
-              mpModule->getOrInsertNamedMetadata(RS_EXPORT_TYPE_MN);
+              M->getOrInsertNamedMetadata(RS_EXPORT_TYPE_MN);
 
         mExportTypeMetadata->addOperand(
             llvm::MDNode::get(mLLVMContext,
@@ -313,7 +311,7 @@
         std::string StructInfoMetadataName("%");
         StructInfoMetadataName.append(ET->getName());
         llvm::NamedMDNode *StructInfoMetadata =
-            mpModule->getOrInsertNamedMetadata(StructInfoMetadataName);
+            M->getOrInsertNamedMetadata(StructInfoMetadataName);
         llvm::SmallVector<llvm::Value*, 3> FieldInfo;
 
         assert(StructInfoMetadata->getNumOperands() == 0 &&