SHARK-138: JoinOperator outputs result of standard objects.
Add a test case for SHARK-138.
Stack trace on scalatest failures
Use a custom shuffle serializer.
Specify serializer on a per shuffle basis.
Make match exceptions serializable.
Fixed ExtractOperator with the new shuffle serializer.
Fixed the compilation error in SortSuite.scala.
Adding variable length integer encoding to ShuffleSerializer.

Also, some minor style cleanup.

Conflicts:
	src/main/scala/shark/execution/serialization/ShuffleSerializer.scala
	src/test/scala/shark/SerializationSuite.scala
Renamed ShuffleSerializerSuite.
Fixed the problem that ShuffleSerializer does not always read the full
bytes and as a result returning negative byte array len.
Broke ReduceKey into two classes (ReduceKeyMapSide and
ReduceKeyReduceSide) so on the reduce side, we don't need to have an
extra level of indirection (BytesWritable). This can save the amount of
memory needed for joins and aggregations.
SHARK-92: Queries with limits will launch one task at a time.
use blockmanager to get values in small table
use blockmanager to get values in small table updated
set storagelevel MEM_AND_DISK  and remove blocks after get values in them
set storagelevel MEMORY_AND_DISK  and remove after get values
SHARK-145: Improve distinct aggregation performance and lower memory usage.
Modify memoryBytesToString to use pattern matching, lazy contants, and displays ranges up front.

- Modify memoryBytesToString to use pattern matching, lazy contants, and displays ranges up front.
Made TablePartition Java serializable.