I'd go `protected` constructor, to allow sub-typing.

(general discussion: I used to be opposed to exposing sub-typing in an API until the code was truly written to be sub-typed in a future-proofed way. But turns out that's way to restrictive in PS-style situations. And besides we're on a 0.x release still so it's not as fanatical about API stability.)