Break out const_addr_of.
Implement most of adjustment handling for consts.

Changes the ad-hoc closure adjustment into using adjustment info instead
of being separately driven from types, and likewise for autoderef.

Also takes care of autoref (the cases we should be seeing in consts,
at least, since we can't be doing method calls which would need the
ref-to-vec mode), which didn't quite work right previously.

However, "dereference" of a newtype isn't handled yet....
Let const_deref "dereference" newtypes.
Make a const translation test match TESTNAME=const
Don't print addr_of(addr_of(e)) as `&&e`, which means something else.
Add some tests for const auto-deref.

const-autoderef.rs is based on an example from jdm in IRC (but the
quadruple-pointer part is entirely my fault).
Don't copy const data to do an autoderef+autoref.
Const dereference works now, so allow it.
add a TotalOrd impl for the unit type
Simplify struct representation.

Out goes the extra layer of struct wrapping; the destructedness flag is
added to the end of the struct.  This means that, if the struct
previously had alignment padding at the end, the flag will live there
instead of increasing the struct size.
Get rid of the `Unit` enum representation.

The only thing we really lose is that C-like enums with one variant and a
non-zero discriminant now take up space, but I do not think this is a
common usage.  As previously noted, that was mostly there for
transitional compatibility with the pre-adt.rs codebase.
librustc: Replace all uses of `fn()` with `&fn()`. rs=defun
libsyntax: Stop parsing bare functions in preparation for switching them over
test: Remove newtype enums from the test suite. rs=deenum
libstd: Remove all newtype enums from std and core.
librustc: Remove newtype enums from librustc
libsyntax: Remove newtype enums from libsyntax. rs=deenum
doc: Remove documentation on newtype enums.
libsyntax: Stop parsing newtype enums
test: Fix tests. rs=tests