Allow Eager Drops

Allow the compiler to drop objects that are no longer used before the
end of their scope. Rust's type system ensures that objects aren't
dropped too soon.  The programmer can explicitly specify an object's
lifetime if necessary.  Removes the need for drop flags.

[Rendered View](https://github.com/rkjnsn/rfcs/blob/allow-eager-drops/active/0000-allow-eager-drops.md)
I guess I was thinking of something like [this](http://play.rust-lang.org?code=use%20std%3A%3Akinds%3A%3Amarker%3A%3AContravariantLifetime%3B%0A%0Astruct%20TestDir%3B%0A%0Aimpl%20Drop%20for%20TestDir%20%7B%0A%20%20%20%20fn%20drop(%26mut%20self)%20%7B%7D%0A%7D%0A%0Astruct%20TestFile%3C'a%3E%20%7B%0A%20%20%20%20lf%3A%20ContravariantLifetime%3C'a%3E%2C%0A%20%20%20%20name%3A%20String%0A%7D%0A%0Aimpl%3C'a%3E%20TestFile%3C'a%3E%20%7B%0A%20%20%20%20fn%20new%3C'a%3E%20(name%3A%20String%2C%20_%3A%20%26'a%20TestDir)%20-%3E%20TestFile%3C'a%3E%20%7B%0A%20%20%20%20%20%20%20%20TestFile%7Blf%3A%20ContravariantLifetime%2C%20name%3A%20name%7D%0A%20%20%20%20%7D%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20dir%20%3D%20TestDir%3B%0A%20%20%20%20let%20file%20%3D%20TestFile%3A%3Anew(%22Test%22.to_string()%2C%20%26dir)%3B%0A%20%20%20%20println!(%22%7B%7D%22%2C%20file.name)%3B%0A%20%20%20%20%2F%2Fdrop(dir)%3B%20%2F%2F%20Error%0A%20%20%20%20drop(file)%3B%0A%7D), where an object is borrowed by another without actually needing a reference, internally. The ergonomics could probably be improved.