Type visibility

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