[service] Abstract: +setState, no permission checks are done

Returns the list of stateLogs
[test] AbstractService: test for setState()
AbstractState: +InRevision, -Deleted
AbstractState: Add state transition maps
AbstractState: +canTransitionTo to check state change perms.

Method added to individual states via an implicit class
[ctrl+route] +Abstracts.setState for state setting of an abstr.

Route to /api/abstrats/:id/state
[test] AbstractCtrl: Test for setState()
[js] astate: StateChangeHelper: new class for state transitions
[views+js] adminAbstracts: Add UI for state transitions
[views+js] adminAbstracts: UI for setting state with note
Merge pull request #156 from gicmo/stateAPI

Add state API and UI for state changes to admin dashboard
getOwn is working for Admin too. fixes #155
[view] AbstractList: extract single abstract view

Extract to compoments.singleabstract
[views+route] Add single abstract viewer (+ state log ui)

Route to /abstracts/id
[views+js] Use viewer for readonly states in adminAbstracts
[views+js] Use viewer for readonly states in user dashboard
[views] Extract the log viewer code into components.statelog
[js] move state log date formatting code to astate (for re-use)
[views] adminAbstracts: explicitly pass null to note in setState
Merge pull request #157 from asobolev/master

getOwn is working for Admin too. Fixes issue #155