Protection against parent state not existing

When calling the StateBuilder.childOf(...) method, if the specified
parent state does not exist yet in the state machine, a
NullPointerException will be thrown.  This change protects against the
null pointer and throws a more specific StateMachineException instead
which describes the problem and how to fix it.
Merge pull request #27 from bnormsoftware/null_parent

Protection against parent state not existing
Making returned sets immutable

Whenever a collection is returned from an object it should be returned
as an unmodifiable collection.  This keeps anyone outside of the object
from modifying the collection in any way.
Merge pull request #28 from bnormsoftware/immutable_transitions

Making returned sets immutable
Merge branch 'master' into builder_package