refactor numeric constants that enforce limits

collect numeric constants that enforce service limits into a common place
make Params a type synonym, rather than a subtype of Map[String,String]

delete Params class and companion object, just declare Params in a package object
move method to parse parameters in HTTP request into servlet
update tests that built params, just use convenient Map(a -> b) syntax
spec and implement MissingParameter API error for Get, Put, and DeleteAttributes actions

MissingParameter: The request must contain the parameter ItemName.
introduce test classes to spec the MissingParameter errors for DomainName and ItemName
avoid rebuilding test data for QueryEvalSuite

build the test data once, and share that for all tests, as all tests are read-only
use scala.xml.XML.write to write out the xml response

change Action.handle to return Node rather than the unnecessarily general NodeSeq
spec and implement MaxNumberOfDomains and NextToken params for ListDomains action

this provides pagination for the result of ListDomains action
implement InvalidParameterValue and InvalidNextToken API error cases
introduce size method on the Data class
introduce test class to spec the API
renaming and clean-up refactorings stemming from Data.scala

Data.getDomains -> Data.iterator
Domain.getItems -> Domain.iterator
Item.getAttributes -> Item.iterator
remove Attribute.values
Attribute.getValues -> Attribute.iterator
Data.getDomain -> Data.get
Data.getOrCreateDomain -> Data.getOrCreate
Data.deleteDomain -> Data.delete
Domain.getItem -> Domain.get
Domain.getOrCreateItem -> Domain.getOrCreate
introduce Item.isEmpty
Domain.deleteItem -> Domain.remove
Domain.deleteIfEmpty -> Domain.removeIfEmpty
Item.getAttribute -> Item.get
Item.getOrCreateAttribute -> Item.getOrCreate
clean-up Item.put
Data.delete -> Data.remove
Item.delete -> Item.remove
Attribute.empty -> Attribute.isEmpty
Item.removeIfNoValues -> Item.removeIfEmpty
Attribute.deleteValues -> Attribute.remove
refactor NoSuchDomain API error code

make it a named exception in Errors.scala
make Data.get return an option, rather than throw the exception
update tests for this error code
introduce InvalidParam check for empty Item and Attribute names
spec and finish implementation of GetAttributes action

test for and throw InvalidParameterValue
provide specs for behaviour and error cases
spec and reïmplement conditional checking for Put and Delete actions

cover API errors for MultipleExpectedNames, MultipleExistsConditions, MultipleExpectedValues, IncompleteExpectedExpression, InvalidParameterValue, ExistsAndExpectedValue, AttributeDoesNotExist, ConditionalCheckFailed, MultiValuedAttribute
catch duplicate parameters in HTTP request
spec and finish implementation of PutAttributes action

test for and throw InvalidParameterValue, MissingParameter, NumberSubmittedAttributesExceeded, NumberItemAttributesExceeded
treat values for an attribute as unordered (update affected tests)
spec and finish implementation of DeleteAttributes action

test for and throw InvalidParameterValue, MissingParameter
refactor method names on ItemUpdates
new specs for ItemUpdates

tweaks to ItemUpdates
test ‘add’ method interface
test ‘execUpdateOn’ effects
test ‘execDeleteOn’ effects