make loadLibrary/unloadLibrary module-level functions

- leave deprecated aliases in Runtime
remove documentation for multiple static druntimes
use version blocks for different loadLibrary implementations

- version(CoreDdoc) use documented declarations
- version(Windows) implementation
- version(Shared) implementation when compiling shared druntime
- else use documented declarations
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
Merge branch 'mangleFunc' into HEAD
workaround Bug 8229 - CTFE strings are not zero-terminated
rewrite tests using the new API

- also test .di header usage
windows need to test exported functions

- Export refuses to work for static variables
  in function scope so put the variables in structs.
workaround Bug 3956 - Optlink strips leading underscores...

...except for the first one
workaround Bug 11133 - documented unittest outside of version scope

- Move unittest to directly after version (D_Ddoc)
  followed by the implementations.

- Dummy symbol for optlink's Bug 3956 needs to be
  placed before the unittest.
remove alias this handle in Library

- no implicit conversion to make Library more typesafe
- use Library in the new loadLib/unloadLib API
- deprecate void* API Runtime.loadLibrary/Runtime.unloadLibray
- add Library.opCast(T:bool) to test for initialized lib
use exception handling for loadLib/unloadLib

- add handle !is null invariant to Library
- remove opCast and disable default constructor
rename loadFunc/loadVar to findFunc/findVar

- Adapt the docs to emphasize that a search is performed
  and null is returned on failure.
wrap dlsym in a D function to avoid libdl dependency in client code