Initial implementation of Message class.

Made .wrapper a mandatory attribute of Event.

Updates tests a bit (probably need more work) to ensure that messages
are deduplicated between Event instances. We access the content of a
message's parent, which is only available because it's been cached.

ref #51
Makes sure we cache recently-accessed Messages even if they aren't directly referenced by recent Events.

ref #51
Removes erroneous and unnecessary import.

ref #51
Adds examples/web_viewer.py, a simple browser-based chat viewer.

We're not building a JavaScript application here, so we are never going
to put any state exclusively in the JavaScript; it's just going to be
some Angular templates reflecting state that's frequently updated from
the server.

We could add inputs, later, but those should just immediately post to
our server, they shouldn't touch the client-side state.
Merge branch 'master' into message-class

Conflicts:
	chatexchange/events.py
Merge branch 'web-example' into message-class.

This now reflects changes to messages (edits, starrings, etc.)

ref #51
Fixes obsolete references to event.text_content in examples/chat.py.
Reduces amount of polling during live tests.

I just looked at a log and it seems like we're sending 100+ polling
events during our testing. That is no good.

One issue is that watchers were never killed; they kept polling even
after the test was finished. I've dealt with that now.

I also reduced the frequency of polling, because these tests don't
really need to see all messages instantly.
Correct difference in polling and socket behaviour.

The socket code was using the time_stamp of a recent event to determine
the value of `l` when opening a WebSocket connection. Instead it should
use the latest top-level (non-event-specific) `'time'` value returned
when joinRoom() is called.

This seems to fix a bug where the WebSocket watcher was missing some
events from immediately after it was instantiated, possibly from a race
condition with the (now-eliminated) unnecessary request to find a time
stamp before opening the socket.

Also extends example to support sending new messages to the room.
Documents GET /message/MESSAGE_ID and POST /user/info/
Improves examples/web_viewer to support editing, replying, starring, pinning

Starring and pinning aren't actually implemented in wrapper yet, so
attempts to use them will crash.
Automatically looks up missing attributes of Messages when they're accessed.

Adds a test which looks up messages by ID, without logging in.

Adds methods to scrape transcript, and to scrape markdown source of
messages.

Renamed test_live_messages -> test_wrapper.

Upgrades to BeautifulSoup 4, for use of the .select() method.

ref #51
Fixes missing `import getpass`
Add incomplete scrape_history, replacing _scrape_source.

ref #51