Change the approach for tixi.items

Instead of using defrecords, which are hard to build a nice inheritance
chains with, migrated to simple maps for items. All these maps just have
a special field called :type, which will be used for polymorphism.

Polymorphic functions are just functions, which have condp checking the
type and executing the right piece of code. For shortness, I've added a
macro 'defpoly', which does that 'condp' thing under the hood, and
allows to use shorter code, like:

    (defpoly foo [item]
      :bar "this"
      #{:bla :zoo} "that"
      "default one")

All in all, seems to be simpler yet more powerful approach, and solves
the problem of sharing the code easily between different branches of the
polymorphic functions.