Add fractional second support to str{p,f}time

The ISO 8601 standard does not mandate any specific precision for
fractional seconds, so this accepts input of any length, ignoring the
part after the nanoseconds place. It may be more correct to round with
the tenths of nanoseconds digit, but then we'd have to deal with
carrying the round through the entire Tm struct (e.g. for a time like
Dec 31 11:59.999999999999).

%f is the format specifier that Python's datetime library uses for
0-padded microseconds so it seemed appropriate here.

cc #2350
move and duplicate macro defns in sha2 to make them hygienic

... it would also have been possible to add all of their dependencies,
but that would have increased the already-lengthy list of parameters.
Also, if we had macros that could expand into macro defns, you could
stage it. This seemed like the least painful choice.
disallow ident equality checks when contexts are not equal
fix for issue #7588, overflow now handled correctly
commenting out special Eq implementation for now

See the comments for details on why I'm leaving this code
in, though commented out.
rename resolve to mtwt_resolve
ident->name
compare macro tokens hygienically (commented out)
try removing basically dead code in resolve
add hygiene support fns, move them around.

also adds test cases
one-line comment
update librustc to use name comparison in most cases, and mtwt_resolve comparison in others
make ifn macro non-capturing
resolve test case

resolve must ignore syntax context when comparing module names
flip the switch on let renaming
renaming test cases
comments in ast.rs
removed unneccessary SyntaxExpander structs
separate ItemDecorator from ItemDecorator
refactor so tt_fold only requires an ident->ident fn