add shadow support

- expose underlying address as ctx/socket.underlying
- add `Context.shadow(address)` and `Socket.shadow(address)`