Add mechanism to the BufferedBlockMgr to allow pinning multiple blocks at once.

The callers of the block mgr will want to Pin() multiple blocks at once
(e.g. PinStream()). Typically, if it can't pin all the blocks, it needs to
unpin them and fall back to something else (e.g. repartitioning).

There's no point in pinning half the blocks (forcing writes to disk).

Change-Id: I0e05b8243a27e8b99f5692f781c4b498d600284d
Reviewed-on: http://gerrit.sjc.cloudera.com:8080/4495
Tested-by: jenkins
Reviewed-by: Nong Li <nong@cloudera.com>