Added `api.get.displayed_email_data()`

Sequel to #48.

-
2 functions related to conversation view:
* `api.get.displayed_email_data()`: returns the whole thread data if convo is on (see below), or _only one_ email data (the one displayed) if convo is off;
* `api.check.is_conversation_view()`: returns _true_ or _false_ if convo is found to be respectively _on_ or _off_. returns _undefined_ otherwise;

2 utility functions (don't know about redundancy):
* `api.tools.extract_email_address(str)`: returns the first email address found in string;
* `api.tools.extract_name(str)`: returns the first name found in string;

-
### With conversation view on
The whole thread is returned, but still there is filtering.

Deleted emails are removed from what's returned, because they aren't actually displayed.
If the thread is being read from trash, it's the opposite: only deleted emails are returned, because others won't be displayed here.

There is something missing: removing contacts from `people_involved` that are not in the displayed emails. That can be discussed. But I guess we want to know details only about displayed elements.

### With conversation view off
`api.get.displayed_email_data()` takes care of filtering all the thread metadata, but only keeps the first email that is considered displayed. For that we look for CSS classes existing with email ids.

`total_emails` is fixed at 1, and both `threads` and `total_threads` contain a single element.

The `subject` property is the one of the thread ; no "Re: " prepended even if there's one on the current email.

The `people_involved` array is re-built with what is found in the email considered displayed: `from`, `from_email` and every element of `to` (from which we extract a name and an email address, to look like what `api.get.email_data()` returns).