Type visibility

Extern explicit template instantiation declarations added to prevent exterior instantation of internally used template instances

- [x] Make visibility `hidden` on unix