Protocol and stdlib improvements

This is everything that I had to add while [porting hiccup](https://github.com/heyLu/hiccup.pxi).

There is one possibly "controversial" change in here:

Protocol fn resolution is now explicitely ordered: the protocols are checked *in definition order*. This allows overriding e.g. IMap and IObject, by overriding IObject later. Previously this wasn't really ordered because it was dependent on RPython's dict hashing

And quite a few functions:

* `declare` and `defn-`
* `defprotocol`, `extend-type`, `extend-protocol`
* `identity`, `mapcat` and `if-let`
* `merge-with`, in addition `merge` now merges elements "left to right", as clojure does

`load-*` uses the MetaDataReader now, to provide better error messages in loaded files.