Work around CTFE limitation (labeled break).

DMD error: Assertion failure: 'e != EXP_CONTINUE_INTERPRET && e != EXP_BREAK_INTERPRET' on line 975 in file 'interpret.c'
Process ":htmlescape" in Diet templates at compile time if possible.
Protect m_ownedObjects by a mutex as unregisterObject() may be called from a foreign thread.

The GC calls finalizaters in whatever thread the collection happened, which can cause unregisterObject() to be executed in a different thread than where the driver and the object live(d). See also #419.
Add some assertions to catch potential threading issues in the libevent2 driver. See #419.
Add support for Rebindable!T in is(Weakly/Strongly)Isolated. Fixes #421.
Add "Path ~= immutable(PathEntry)[]" to make Variant happy.
Merge branch 'master' of https://github.com/rejectedsoftware/vibe.d
	renamed:    source/vibe/http/session/cache.d -> source/vibe/http/cache/cache.d
	renamed:    source/vibe/http/session/memory.d -> source/vibe/http/cache/memory.d
	renamed:    source/vibe/http/session/redis.d -> source/vibe/http/cache/redis.d
Cache concept created
Implement RecursiveTaskMutex (not performance optimized).
Treat Throwable as a weakly isolated type (allowed to pass between threads).

Although this imposes a hole in the type system, it is necessary for many practical applications.
Merge branch 'master' of https://github.com/rejectedsoftware/vibe.d
Fix HashMap to handle null keys.
Reimplement thread management/shutdown and start worker threads by default. See #419.
Streamline thread shutdown handling and don't wait in the signal handler for all threads to shut down.

Also replaces the implicitly "__gshared" s_core.m_eventLoopRunning by a thread local s_eventLoopRunning. This sometimes caused threads to not exit when they should. See #419.
Merge branch 'master' of https://github.com/rejectedsoftware/vibe.d