Typesafe

The beginning of an effort to make those bindings type safe:

* properties accessed via: `getProperty`/'setProperty` which takes property name as `string`, but performs compile time lookup to check whether said property is applicable, and what its type (property definitions needs to be filled)

* elements parametrized by element type (types needs to be filled)

* events parameterized by event type and element type (currently only mouse/keyboard events implemented) meaning only correct handler can be used and it's not possible to obtain undefined values inside it

Currently, it seems like the only place where you can still cheat Idris is `query`, as it requires you to pass element type, and then every element from result will be of this type. `Unspecified` is the type that should expose all basic `element` properties.

The work is not done, but the bulk of it is, hence the PR. Will be filling rest later.