Use rlibc crate
Merge pull request #113 from errordeveloper/rlibc

Use rlibc crate

Reviewed-by: farcaller
Fixed static lifetimes
Fixed broken rlib dependency generator
Do not optimize PT crate
Checkout the matching version or libcore
Merge pull request #116 from farcaller/fix-lifetimes

Fixing a bunch of nightly fallouts

Reviewed-by: bgamari
ioreg: Initial commit of syntax extension

This syntax extension enables the generation of types and bitfields
accessors from a convenient source representation.

A register set is defined in a domain-specific language parsed by the
`ioregs!` macro. There are three primitives in this language,

  * *registers* are defined by a name, an offset from the beginning of
    the containing group, and a type. Register types include group of
    registers and primitive bitfield types ( `reg32`, `reg16`, `reg8`)
  * *fields* are a range of bits within a bitfield, identified by a
    name and a type (either implicitly `uint` or `bool`, or an
    syntactically explicit `enum`)

Register and field types can both be arrays.

For example, consider
[this](https://gist.github.com/bgamari/071e50b185278f56dc78#file-example-registers-txt)
register set. This would be translated to the proposed DSL as follows,

```rust
ioregs!(
    FTM = {
        /// FlexTimer module.
        ///
        /// This is a timer module
        0x0  => reg32 SC  /// Status and control register
        {
             0..2 => PS,           /// Prescale
             3..4 => CLKS
             {
                 0x0 => NO_CLOCK,     /// no clock selected
                 0x1 => SYSTEM_CLOCK, /// use system clock
                 0x2 => FIXED_FREQ,   /// use fixed frequency clock
                 0x3 => EXTERNAL,     /// use external clock
             },
             5    => CPWMS,
             6    => TOIE,
             7    => TOF: ro,
        },

        0x4  => reg32 CNT /// Count register
        {
            0..15 => COUNT,
        },

        0x8  => reg32 MOD /// Modulo register
        {
            0..15 => MOD,
        },

        0xc  => group CH[8]                 /// Compare/capture channels
        {
            0x0 => reg32 CSC                /// Compare/capture channel status and control register
            {
                0 => DMA,
                2 => ELSA,
                3 => ELSB,
                4 => MSA,
                5 => MSB,
                6 => CHIE,
                7 => CHF,
            },

            0x4 => reg32 CV                 /// Channel counter value
            {
                0..15 => VAL,
            },
        },

        0x4c => reg32 CNTIN                 /// Counter initial value register
        {
            0..15 => INIT,
        },

        0x50 => reg32 STATUS                /// Channel status register
        {
            0..7 => CHF[8],                 /// Channel flags
        },
    }
)
```
ioreg_test: Temporarily commit
k20: Begin to port K20 to ioregs!
ioreg/parser: Update for rustc changes
ioreg: Fix for new rustc
ioreg: Split up builder
builder: Add helper
small cleanup
Things
ioreg: Major rework of builder
Add getters
Docstring support
Register rework