feat: type shared() return based on schema argument
Overloaded shared() so that:
- shared(int32) returns Int32
- shared({ x: int32, y: int32 }) returns SharedStruct<{ x: Int32, y: Int32 }>
- shared([int32, int64]) returns Tuple<[Int32, Int64]>
- shared(42) returns Int32
- shared(0n) returns Int64
- shared(true) returns Bool
- shared(bytes(n)) returns Bytes
- shared(string(n)) returns SharedString
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>