Add a Cleanroom object for evaluating DSLs

This PR is a result of a 5-hour plane ride.

- Evaluate DSLs in a cleanroom. This prevents unintentional (or intentional) modification of things inside a project/software. It also implicitly declares a DSL API.
- Declare a public API in project and software
- Remove methods that don't do anything or just add indirection
- Do what a bunch of `@todo` comments said to do

/cc @opscode/release-engineers @opscode/client-eng 
`extend` is public, and a module is already being included here. Why not just define `null?` on `Nullable` directly and get rid of the `base.send(:include, InstanceMethods)` part?