add high-level Library wrapper

- loadLibrary now returns a Library struct
- Library sub-types the native platform handle (alias this)
- Library.loadFunc loads a D mangled function
- Library.loadSym loads a D mangled variable
core.demangle.mangleFunc for different linkage types

- error out for extern(C++)
- preserve plain names for extern(C), extern(Pascal) and extern(Windows)
workaround Bug 8229 - CTFE strings are not zero-terminated
rewrite tests using the new API

- also test .di header usage