Rework of the Makefiles

A macro is now used to construct all of the targets, which
required re-writing most of rust.mk. Additionally, changes
were made to handle rustc now requiring --crate-type be passed
for libraries.
Update rust-crypto-tool to handle getopts being in its own crate and the IO refactoring to use the IoResult return type everywhere
Merge pull request #29 from DaGenix/fixups

Fixups to build system and to handle new stuff in Rust