Make HyObject.replace more resilient

This makes it work on quoted objects, and allows us to make macroexpand this:

```clj
(defn macroexpand [form]
  (import hy.macros)
  (hy.macros.macroexpand form --name--))
```