hy.contrib.walk: New contrib module for walking the Hy AST

The hy.contrib.walk module provides a few functions to walk the Hy AST,
and potentially transform it along the way. The main entry point
is (walk), which takes two functions and a form as arguments, and
applies the first (inner) function to each element of the form, building
up a data structure of the same type as the original. Then applies outer
(the second function) to the result.

Two convenience functions are provided: (postwalk) and (prewalk), which
do a depth-first, post/pre-order traversal of the form.

Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
hy.contrib.walk: Add (macroexpand-all)

This function will recursively perform all possible macroexpansions in
the supplied form. Unfortunately, it also traverses into quasiquoted
parts, where it shouldn't, but it is a useful estimation of macro
expansion anyway.

Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
hy.contrib.walk: Add support for walking cons cells

Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
faster distinct: maintain seen items in a set

* hy/core/language.hy: maintain the seen items in a set instead of a
  list in `distinct`. This is much faster for lookups.
Merge pull request #494 from theanalyst/fix/distinct

faster distinct: maintain seen items in a set
Kill kwapply.

Closes #433.