[new AA] core.internal.hash fixes

This PR contains the follownig changes:
1. some hashOf functions has unmarked with `@trusted nothrow`: we can't guarantee that struct hashOf is `@trusted` or `nothrow`.
2. typedef support added: current AA implementation supports typedef keys (deprecated but allowed), and dmd tests checks that typedef keys are allowed.
3. `typeof(null)` case for hashOf added.
4. `seedHash` has unmarked with `private`, because this function is usefull for hash chaining inside user `toHash`
5. if struct has toHash member, but it cannot be called with passed this hashOf writes warning, but doesn't raise error. (for backward compatibility: current AA implementation ingores wrong toHash in this case)
6. pass value by ref into foreach in `hashOf` for AA: avoid to call postblit.
seedHash need for combine two hashes:
```
size_t toHash()
{
   size_t h = 0;
   h = seedHash(field_1.hashOf(), h);
   h = seedHash(field_2.hashOf(), h);
   h = seedHash(field_3.hashOf(), h);
   return h;
}
```
Yes, `mixHash` might be better.