Fix predicate template implementations in std.traits and std.range

Use T.init property instead of void initializer, because it will work even if T is const or immutable type.

I must change a part of unit test for the bug 6935, because we cannot support ranges which overrides init property.
Add a test case isAssignable!(void[1], void[1])