Add an Instruction trait

It only provides "fn size(&self) -> uint" for now. As Instructions can be
encoded, it inherits the Encodable trait.

As a result, ARM instructions are now name ARMInstructions.
Add an Assembler trait and refactor ARMAssembler

It provides a generic interface to building an assembler.

Methods:
  * new() -> Self
  * feed(~[Instruction])
  * assemble() -> Function

This patch also refactors the internal of the ARMAssembler to make use of the
feed method.
Change the Label interface to an Address enum.

The Address enum is either:
  * Offset
  * Label

Using this interface allows for the encoding of addresses to be done in instr.rs
instead of asm.rs.

Only an ARM instruction with an Offset address can be encoded, the ARMAssembler
converts the two other types to an Offset and then reencodes the instruction.

The Label (fake)instruction is replaced by Bind.