Make all remaining surface constructors protected
Constructors in Surface are marked protected, but not the ones in derived classes. This allows stack construction, and requires some additional fixes, mostly in tests. Also now required Surface to be friend of all its derived classes, to enable access to the now proteced constructors
Closes ACTS-548