Make Input component more useful (respects error prop declaratively)

I've changed the way the and `Input` component decides whether there is an error or not.

`Input` doesn't have any state related to errors any more. Instead the error is hold completely inside props.

Some examples:

    // this will show an error
    <Input name="input" error="this is an error" />
    // these will not show an error
    <Input name="input" />
    <Input name="input" error={undefined} />
    <Input name="input" error={null} />

This is more declarative than having to call `setError` and `removeError` and allows components to
use the `Input` more concisely.

Additionally I also made `type="text"` default for the `Input` (although this is something debatable).
`null` is a keyword, whereas `undefined` is not. Better to use `null`.