Make use of the new conservative `impl Trait` feature available in the latest Rust nightlies.
This allows us to reduce the visibility of the various implementation structs (making
them module-private instead of `pub`, and removing the #[doc(hidden)] workaround).
Move core modules into a frustum_core crate, and turn frustum into a facade for everything.
This allows apps to depend on a single frustum crate (and a single `use frustum::*`) to
get access to just about everything.