Provide better abstraction of class Slang.

1. Remove the Slang C APIs support (not used by any other programs.)
2. All RS relatives are now in slang_rs_*.cpp.
diff --git a/slang_backend.h b/slang_backend.h
index b434262..24ec8d4 100644
--- a/slang_backend.h
+++ b/slang_backend.h
@@ -9,26 +9,22 @@
 #include "llvm/Support/FormattedStream.h"
 
 #include "clang/AST/ASTConsumer.h"
-#include "clang/Frontend/CodeGenOptions.h"
-#include "clang/Basic/SourceManager.h"
 
-#include "libslang.h"
+#include "slang.h"
 #include "slang_pragma_recorder.h"
 
 namespace llvm {
+  class formatted_raw_ostream;
   class LLVMContext;
   class NamedMDNode;
-  class raw_ostream;
   class Module;
+  class PassManager;
+  class FunctionPassManager;
 }
 
 namespace clang {
-  class ASTConsumer;
-  class Diagnostic;
-  class TargetOptions;
-  class PragmaList;
+  class CodeGenOptions;
   class CodeGenerator;
-  class ASTContext;
   class DeclGroupRef;
   class TagDecl;
   class VarDecl;
@@ -41,11 +37,9 @@
   const clang::CodeGenOptions &mCodeGenOpts;
   const clang::TargetOptions &mTargetOpts;
 
-  clang::SourceManager &mSourceMgr;
-
   // Output stream
   llvm::raw_ostream *mpOS;
-  SlangCompilerOutputTy mOutputType;
+  Slang::OutputType mOT;
 
   llvm::TargetData *mpTargetData;
 
@@ -63,47 +57,8 @@
 
   llvm::formatted_raw_ostream FormattedOutStream;
 
-  bool mAllowRSPrefix;
-
-  inline void CreateFunctionPasses() {
-    if (!mPerFunctionPasses) {
-      mPerFunctionPasses = new llvm::FunctionPassManager(mpModule);
-      mPerFunctionPasses->add(new llvm::TargetData(*mpTargetData));
-
-      llvm::createStandardFunctionPasses(mPerFunctionPasses,
-                                         mCodeGenOpts.OptimizationLevel);
-    }
-    return;
-  }
-
-  inline void CreateModulePasses() {
-    if (!mPerModulePasses) {
-      mPerModulePasses = new llvm::PassManager();
-      mPerModulePasses->add(new llvm::TargetData(*mpTargetData));
-
-      llvm::createStandardModulePasses(mPerModulePasses,
-                                       mCodeGenOpts.OptimizationLevel,
-                                       mCodeGenOpts.OptimizeSize,
-                                       mCodeGenOpts.UnitAtATime,
-                                       mCodeGenOpts.UnrollLoops,
-                                       // Some libc functions will be replaced
-                                       // by the LLVM built-in optimized
-                                       // function (e.g. strcmp)
-                                       /* SimplifyLibCalls */true,
-                                       /* HaveExceptions */false,
-                                       /* InliningPass */NULL);
-    }
-
-    // llvm::createStandardFunctionPasses and llvm::createStandardModulePasses
-    // insert lots of optimization passes for the code generator. For the
-    // conventional desktop PC which memory resources and computation power is
-    // relatively large, doing lots optimization as possible is reasonible and
-    // feasible. However, on the mobile device or embedded system, this may
-    // cause some problem due to the hardware resources limitation. So they need
-    // to be further refined.
-    return;
-  }
-
+  void CreateFunctionPasses();
+  void CreateModulePasses();
   bool CreateCodeGenPasses();
 
  protected:
@@ -123,9 +78,7 @@
           const clang::TargetOptions &TargetOpts,
           const PragmaList &Pragmas,
           llvm::raw_ostream *OS,
-          SlangCompilerOutputTy OutputType,
-          clang::SourceManager &SourceMgr,
-          bool AllowRSPrefix);
+          Slang::OutputType OT);
 
   // Initialize - This is called to initialize the consumer, providing the
   // ASTContext.