Upgrade LLVM and Clang to current ToT (#305)

* Fix uses of getOrInsertFunction
  * return type changed
* Fix uses of raw_fd_ostream
  * enums changed
* Fix memcpy replacement
  * alignments are now src and dest params
* Add default verification prefix
  * needs to know what string to use with -verify
* Test updates
  * struct inserts needs new targeted tests
  * pointer selection needs new targeted tests
* Allow old toolchains
* rewrite function attribute copy
diff --git a/lib/Compiler.cpp b/lib/Compiler.cpp
index bd52497..8c6b12b 100644
--- a/lib/Compiler.cpp
+++ b/lib/Compiler.cpp
@@ -376,6 +376,7 @@
 
   if (verify) {
     instance.getDiagnosticOpts().VerifyDiagnostics = true;
+    instance.getDiagnosticOpts().VerifyPrefixes.push_back("expected");
   }
 
   clang::LangStandard::Kind standard = clang::LangStandard::lang_opencl12;
@@ -762,8 +763,9 @@
   std::error_code error;
   if (!DescriptorMapFilename.empty()) {
     llvm::raw_fd_ostream descriptor_map_out_fd(DescriptorMapFilename, error,
-                                               llvm::sys::fs::F_RW |
-                                                   llvm::sys::fs::F_Text);
+                                               llvm::sys::fs::CD_CreateAlways,
+                                               llvm::sys::fs::FA_Write,
+                                               llvm::sys::fs::F_Text);
     if (error) {
       llvm::errs() << "Unable to open descriptor map file '"
                    << DescriptorMapFilename << "': " << error.message() << '\n';
@@ -791,7 +793,7 @@
       OutputFilename = "a.spv";
     }
   }
-  llvm::raw_fd_ostream outStream(OutputFilename, error, llvm::sys::fs::F_RW);
+  llvm::raw_fd_ostream outStream(OutputFilename, error, llvm::sys::fs::FA_Write);
 
   if (error) {
     llvm::errs() << "Unable to open output file '" << OutputFilename