Make calls to StringBuilder::append nicer
Add mailing list to README.md
Fix deprecated plugin paths for SBT 0.11.2
Update README description for issues/questions.

Consolidate the issue tracker, mailing lists and Apache licensing
descriptions into a single section.
Simple left and right outer joins for two DLists.

This is a first attempt at adding support for simple
left and right outer joins on two DLists. I'm not sure
it makes sense to perform outer joins on more than two
DLists but that is definitely up for discussion.

I've chosen to deal with missing values by specifying
a function that takes the key and the other value to
produce a new (default) value. This serves my purpose
but I have no idea what other people would need.

I've started a discussion on the dev list about how to
unit test Scoobi but until I know better, I've added a
new example project that demonstrates inner, left, and
right joins.
Fix for MscrMapper not found exception when running on a cluster

The call to .head might have been getting a file, rather than the
jar -- which means it wouldn't have all the deps in the created
jar, and would give an error on the first thing it found (which
seems to be MscrMapper)
Use implicit conversion of Option to Iterable

Thanks to Neil Essy for pointing this out
Fix an issue where Scoobi would die on writing long strings.
fixing typos
Support glob patterns in input path specification.

Allow an input path to be a glob pattern. As a consequence also fix an
error in the calculation of the size of the input data in the case where
the input is a directory.
Add logging of input paths and their size.
Refactor implementation of data I/O

Refactor how I/O is implemented to make it simpler to support different
I/O types. For example, without this refactoring, it is difficult to
implement "native" support for Sequence files.

The primary refactoring is for MapReduce jobs generated by Scoobi to
use InputFormats and OutputFormats specific to the type of I/O required.
This is in contrast to the current implementation where I/O was
hard-coded to text files with BridgeStores being a special case.
Using InputFormats and OutputFormats in their raw form allows the many
exsiting classes to be leveraged. A consequence of this change is that
InputConverters and OutputConverters are implmeneted to convert between
the key-value types of InputFormats/OutputFormats and the types of
DLists.

As a demonstration of this refactoring, also implmenent support for
reading and writing Sequence Files.
Create DLists from a Scala function.

Add a DataSource that produces a specifed number of input values based
on a Scala function that maps an index to an element value. The
DataSource requires the creation of a FunctionInputFormat that produces
InputSplits and RecordReaders encapuslating the specifie ScalaFunction.

Using the new DataSource, create DList companion object "sugar" methods
for easily forming new DLists from a list/sequence of values or by
directly specifying a Scala function.
Add helper method to write delimited text files.

Implement a helper method that, given a DList of a Product type,
persists it as delimited text file where the separator is specified as a
method arguement. Also support the case of nexted Product types.
Improve logging infromation of steps.

Add more logging for information associated with each of the 'steps'
(i.e. MSCR) executed in a Scoobi job. This includes tracking of mapper
and reducer task progress.

Further, log 'job' level information such as the number of tasks,
input sources, output targets, etc. Modify the MR job name for Scoobi
tasks to be a concatenation of the Scoobi job id and current step id.
Implement 'materialize' method for DLists.

Add a 'materialize' method on DLists that returns a DObject of type
Iterable. That is, it is a mechansim to bring the values of a DList out
of a Scoobi job/computation and into the client world.

A DObject is a wrapper type for "scalar" result computations within a
Scoobi job. Its API is somewhat brief and is likely to change.

To specify that a DObject is to be included as part of a Scoobi job's
computations, provide a 'Job' class, to which persisted DLists and
DObjects can be added, after which it can be run (forcing the
computation).
Ensure reducer/combiner values remain lazy.

Fix bug where the set of values passed into a reduce function are
completely brought into memory rather than being treated as a true lazy
Iterable.

As a consequene of this fix, if there is no reducer (i.e. the outptut of
a GroupByKey is the last node in an MSCR resulting in an identity
reducer), need to ensure that the Iterable values *are* actually brought
into memory before emitting.
Partition based on actual key within TaggedKey.

Undo bug introduced by a6a9c80b. When partitioning, simply use the
hash of the actual key value wrapped within a TaggedKey.

In contrast to the comments made in the erroneous commit above, a single
reducer tasks is able to handle keys-values associated with multiple MSCR
output channels. The logic to separate channel outputs into their correct
destination files is handled by ChannelOutputFormat which internally
leverages MultipleOutputs.
Improve performance of Iterable WireFormat.

Use a Vector and VectorBuilder, rather than a MutableList, to build up
an Iterable from the DataInput stream in Iterable's 'fromWire'.
Add Grouping to replace Ordering constraint

Replace the Ordering type class constraint on the Key type of the
GroupByKey primitive with a new type class, Grouping. The Grouping type
class abstracts the "sort-and-shuffle" behavior of MapReduce via three
methods: partition, groupCompare, and sortCompare. Implement defaults
for partition (simple hash partitioning) and groupCompare (calls
sortCompare).

Provide implicit Grouping type class instances for those types for which
an Ordering type class instance exists, as well as for types that
inherit from Comparable (e.g. WritableComparable).