Refactor bounded_queue<T> implementation to reduce redundancy.

Introduce private push_(), try_push_(), push_wait_until_() helper methods:
each of push(), try_push() and push_wait_until() has two signatures for
value_type const& versus value_type&&, but the code paths are identical once
we have a new node_type in hand. Moreover, extract processing common to all
into private push_and_notify_() method. (This fixes an inconsistency in push()
exception behavior.)

Extract common processing from pop(), value_pop(), try_pop() and
pop_wait_until() to private value_pop_() method. This retains a node_type::ptr
to the old head node until return time, unifying the code paths between its
return-by-value and assign-through-reference callers. (This fixes an
inconsistency in try_pop() exception behavior.)
Update docs for barrier.hpp and bounded_queue.hpp.

Use std::size_t as argument type for barrier constructor.

Add bounded_queue::upper_bound(), lower_bound(), value_pop().

Make is_empty(), is_full() const.

Add TimePointType template param to push_wait_until(), pop_wait_until().
Move lock acquisition from private back to public methods.

Oliver pointed out the thread-safe-interface pattern:
http://www.cs.wustl.edu/~schmidt/PDF/locking-patterns.pdf
Reintroduce pthread_key_create() implementation for Mac thread_local_ptr.

At some point the original implementation seems to have gotten lost?
Pass unique_lock down to push_() and push_wait_until_().
Earlier refactoring moved the unique_lock instantiation back to public
methods, though it was referenced in private methods. Pass it into those
methods.
Move new node_type allocations before locking mtx_.
Merge pull request #14 from nat-goodspeed/develop

Refactor bounded_queue<T> implementation to reduce redundancy.