More visibility modifiers

Minimum Rust version: 1.18

You can use the pub keyword to make something a part of a module's public interface. But in addition, there are some new forms:

pub(crate) struct Foo;

pub(in a::b::c) struct Bar;

The first form makes the Foo struct public to your entire crate, but not externally. The second form is similar, but makes Bar public for one other module, a::b::c in this case.