First pass at revamping the SgField class

The field class was a nightmare in terms of subclassing, most
notably with creating custom user fields.

Major changes to the field class:
  * SgUserField removed
  * The constructor no longer takes a parentEntity and schemaInfo
  * New schema info class SgFieldSchemaInfo2 for user fields
  * _parent and _info moved to private variables
  * Return types hard coded for each field class
  * Entity class now has an add/remove function for adding fields

SgUserField removed

- User fields presented a mess for creating field subclasses.  They
  made it very manual to define a new class and you could not subclass
  pre-existing field types because of them.

  id and type fields are now subclasses of int and text field classes.

Constructor changes

- The constructor for fields no longer accepts a parent entity and
  the schema info object that defines the field.

  Instead the field accepts a name and optional label argument (which
  when not specified the name is capitalized and used for the label).
  The third arg is for specifying a SgFieldSchemaInfo object to use
  for the field.  When not specified one is generated.

  When a field is constructed as a user field it creates an info obj
  that is of SgFieldSchemaInfo2.  These new info classes are
  specifically for user fields as they are editable unlike the main
  schema info class.

_parent and _info moved to private variables

- The Fields _parent and _info variables are now private as they
  do not need to be exposed any longer.

Return types hard coded for each field

- Return types are now hard coded for each field class so they do not
  need to depend on the schema info object.

  This was needed because when a user field generates its schema info
  object it needs to know what return type the field is.

Entity class now has an add/remove field function

- User fields can be added to Entity objects by passing them to the
  addField() function.

  Field names are checked and an Exception is thrown if a field with
  the name already exists on the Entity.  The field once added has its
  parent updated to reflect the Entity it was added to.

  Fields can be removed by name with the removeField() function.
  Fields that are not user fields are not able to be removed from
  Entity objects.  Any attempt to remove a schema field will result
  in an Exception being thrown.
No longer needed after field class revamp
Creation of "type" field schema info object now happens as callback

- The creation of the "type" fields SgFieldSchemaInfo now happens
  during the onEntitySchemaInfoCreate() callback.
Updated example SearchExpressionField and added callback example

- Updated the SearchExpressionField example with the new field changes

- Added new example file that shows hooking into the callback system