Refactor segment rendering

This commit introduces the following changes to themes and segment
rendering:

- Spacer segments are now regular string/function type segments with
  "width": "auto" in the themes.
- The "rjust"/"ljust" properties have been replaced by the "width"
  option combined with a new "align" option.
- Renderer._render_segments() is now a generator which renders each
  segment separately, and assigns the rendered contents to
  "_rendered_hl" and "_rendered_raw" in the segment dict.
- Renderer.render() returns the segments by joining the "_rendered_hl"
  values for each segment.
- Spacer segment widths are calculated in the render() method, and
  assigned to "_space_left" and "_space_right" in the segment dict.
  These spaces are then applied in Renderer._render_segments().
- All space characters are converted to no-break spaces (U+00A0) in the
  "_rendered_hl" property.

Refs #113.
Refs #154.
Replace spaces *before* highlighting contents

The previous change obviously didn't work for renderers like the Pango
markup renderer since the highlighting code uses regular spaces and not
no-break spaces. Now spaces are replaced in the contents and dividers
only, and it's done before highlighting the segment so the added
highlighting code stays untouched.

Refs #113.
Remove support for persistent memoization

A different form of persistent memoization should be reimplemented later.

Refs #159.
Fix Unicode issues with mail segment
Add common player conversion methods
Update now_playing methods to use common formatting methods
Add cmus player to now_playing segment

Closes #162.
Merge branch 'develop' into zsh/zpython
Purged out precmd hook: now using new define_magic_string method
Added missing “setopt promptsubst”