Organize defcomponent macro

This should be a little easier to follow and better organization
Remove bound-methods for now

/cc @scottrabin
Test that protocols satisfied with defcomponent
Implement toString in defcomponent
Whitespace fixes
Add to-attr implementation for Numbers

Numbers should just be stringified.
Add function to create diff vector of attrs

Function takes two sets of attrs, previous attrs and next attrs, and produces a
sequence vectors in the following forms: [operation key value] or [operation key]

Operations include :set-attr, :remove-attr, :set-style, :remove-style
Add a TODO
Get set-state! in working state

__This is a big refactor and still a WIP. Some tests needed to be added updated,
and/or removed__

*   Introduce notion of cursor. This is seq, starting with root-id, and any
    number of indicies to locate a component nested under the root-component.
*   Reintroduce of the IMount protocol, which renders the component and recurses
    by mounting children
    *   Reversed dependency between tesseract.mount and tesseract.component,
        which makes sense to me
    *   mount! takes the cursor for the current node and is responsible for:
        *   Associating cursor to returned component
        *   Passing cursor to children after appending the child offset
    *   mount! is only called on initial render
*   Introduce notion of building components, by replacing update
    *   We've been strugging as to what 'update' actually means/does
    *   Same concept as mount!, however, does not include mount life cycle hooks
    *   -build is method we use when updating state
*   Update IWillMount and IDidMount to be bang! naming convention because they
    are intended to allow side-effects.
*   Update IWillMount to expect an (updated) component to be returned so that
    state modifications can happen inline with render. The original assumption
    was that set-state! would be called, and those changes would be incorporated
    before render, but it doesn't make sense to use side-effects when we can
    update inline.
Rename IShouldUpdate => IShouldRender
Cleanup & document life-cycle protocols

Removes verbiage of 'update' and replaces with 'build'

Adds documentation of life-cycle protocols (although they aren't all correctly
implemented yet).
Trivial reordering of protocol definition

Put IComponent at top. Still needs docstring...
Create tesseract.attrs namespace

Move the attr diff methods into separate namespace.
Update test to use update-state!
Fix tesseract.attrs-test
Add set-state! test
Add prev-component to -build signature

We need to pass the previous component (ie state & attrs) when building so that
we can invoke life-cycle hooks that take it.

Also need to pass along root-node when we are building the root.
Add root-node to -mount! signature

We need to pass the root-node to the component getting mounted in order to
support life-cycle hooks, specificall -did-mount!
Mount instead of build when prev child DNE

Mounting should happen when a component is being rendered for the firs time.
When building DOM components, if a new child is inserted, it should run the
mounting life-cycle rather than the building. (React has this behavior)

TODO, this also means that -build should probably be renamed to -build! because
it can call -mount! and side-effects are allowed there.
Add bang! to IComponent's -build

It can have side-effects, such as calling mount! in the case where a new child
is being created.