[Ready for review/merge] Search time

search.js:
- Updated debugging output for readability.
- Search results were trying to key compare on unset values.

search.html
- UI now shows tags for search results and links to searches for those tags.

connection.py
- Removing `host_to_ip` code due to unexpected connectivity issues and minimal benefit.
- Fixed null `callback` passed to `lambda`.
- Upped timeout to 5 seconds for slow peers.

dht.py
- `add_known_node` takes a URI not an ip and port separately so fixed that.
- Removed some unnecessary debugging output to clarify logs.
- Fix adding known node if not in the `knownNodes`.
- Removed Timeout of peers unknowing. This seems to be causing a threading issue where someone might try to reach that peer as you’re unknowing it. There probably needs to be a better way to do this.
- Kademlia requires you to send back close nodes even if you have routing to the exact node and we were shorting that by just returning the exact node. This creates an issue stopping us from having redundancy of storage.
- Mostly debugging cleanup beyond this.

market.py
- Debugging info added.
- Threading now for DHT storage of contracts, updates to listing indices and keyword indices.

transport.py
- Fixed the ip/port and URI issue mentioned above.

ws.py
- Added a client refund order method for setting up refunds (somewhat unrelated to the rest of the PR but give me a break).
The structure of this `if` is as follows:
```
assert uri

if uri is not None:
    # lots of code
else:
    # some tiny logging
# method ends
```
This is hard to read, and perhaps a bit redundant. First of all, since we `assert uri`, the `else` part is unreachable code. From the assertion it appears the the `uri` is absolutely critical to the code, thus the conditional should be removed, together with the `else` part.